{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "461b1d52-8bb8-463f-ae34-ca7abad564b2",
   "metadata": {},
   "source": [
    "# pandas 数据分析库 - 高级"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "061f151b-b697-4134-8c94-892e01a79b2f",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1f7e102f-4d54-4dcd-b6ce-794cbe547c8b",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 数据集成"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fcf8ed02-f802-4ac1-abfd-e0c5c0b5ed22",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "### 1.concat 合并 df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "ce2cc205-aa21-4e40-9536-4d77d0962903",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>5</td>\n",
       "      <td>84</td>\n",
       "      <td>67</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>104</td>\n",
       "      <td>22</td>\n",
       "      <td>47</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>62</td>\n",
       "      <td>48</td>\n",
       "      <td>148</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>19</td>\n",
       "      <td>102</td>\n",
       "      <td>41</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>19</td>\n",
       "      <td>100</td>\n",
       "      <td>81</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>98</td>\n",
       "      <td>109</td>\n",
       "      <td>117</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>23</td>\n",
       "      <td>108</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>7</td>\n",
       "      <td>98</td>\n",
       "      <td>65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>9</td>\n",
       "      <td>106</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>80</td>\n",
       "      <td>8</td>\n",
       "      <td>135</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pytorch  Tensorflow  Keras\n",
       "A        5          84     67\n",
       "B      104          22     47\n",
       "C       62          48    148\n",
       "D       19         102     41\n",
       "E       19         100     81\n",
       "F       98         109    117\n",
       "G       23         108     12\n",
       "H        7          98     65\n",
       "I        9         106     27\n",
       "J       80           8    135"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>15</td>\n",
       "      <td>71</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>145</td>\n",
       "      <td>114</td>\n",
       "      <td>115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>84</td>\n",
       "      <td>63</td>\n",
       "      <td>44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>N</th>\n",
       "      <td>45</td>\n",
       "      <td>33</td>\n",
       "      <td>68</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>116</td>\n",
       "      <td>145</td>\n",
       "      <td>44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>58</td>\n",
       "      <td>93</td>\n",
       "      <td>58</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>134</td>\n",
       "      <td>4</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>127</td>\n",
       "      <td>98</td>\n",
       "      <td>146</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>13</td>\n",
       "      <td>82</td>\n",
       "      <td>32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>63</td>\n",
       "      <td>33</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pytorch  Tensorflow  Keras\n",
       "K       15          71     21\n",
       "L      145         114    115\n",
       "M       84          63     44\n",
       "N       45          33     68\n",
       "O      116         145     44\n",
       "P       58          93     58\n",
       "Q      134           4     33\n",
       "R      127          98    146\n",
       "S       13          82     32\n",
       "T       63          33      1"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>1</td>\n",
       "      <td>123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>26</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>50</td>\n",
       "      <td>112</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>105</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>105</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>17</td>\n",
       "      <td>43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>141</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>135</td>\n",
       "      <td>47</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>24</td>\n",
       "      <td>46</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>85</td>\n",
       "      <td>54</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  English\n",
       "A       1      123\n",
       "B      26        9\n",
       "C      50      112\n",
       "D     105       24\n",
       "E     105       13\n",
       "F      17       43\n",
       "G     141       29\n",
       "H     135       47\n",
       "I      24       46\n",
       "J      85       54"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 一班的部分考试成绩\n",
    "df1 = pd.DataFrame(np.random.randint(0, 150, size=(10, 3)),\n",
    "                   index=list('ABCDEFGHIJ'),\n",
    "                   columns=['Pytorch', 'Tensorflow', 'Keras'])\n",
    "\n",
    "# 二班的部分考试成绩\n",
    "df2 = pd.DataFrame(np.random.randint(0, 150, size=(10, 3)),\n",
    "                   index=list('KLMNOPQRST'),\n",
    "                   columns=['Pytorch', 'Tensorflow', 'Keras'])\n",
    "\n",
    "# 一班的另一部分考试成绩\n",
    "df3 = pd.DataFrame(np.random.randint(0, 150, size=(10, 2)),\n",
    "                   index=list('ABCDEFGHIJ'),\n",
    "                   columns=['Python', 'English'])\n",
    "\n",
    "display(df1, df2, df3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e8fa0977-64ae-4558-a8f7-aea676e44589",
   "metadata": {},
   "source": [
    "**合并 df1 和 df2** ：考试科目一样，属于列索引相同的 dataframe 合并"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "6bef5ca3-a6bd-4fa6-8aa4-e98978e083a0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>5</td>\n",
       "      <td>84</td>\n",
       "      <td>67</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>104</td>\n",
       "      <td>22</td>\n",
       "      <td>47</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>62</td>\n",
       "      <td>48</td>\n",
       "      <td>148</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>19</td>\n",
       "      <td>102</td>\n",
       "      <td>41</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>19</td>\n",
       "      <td>100</td>\n",
       "      <td>81</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>98</td>\n",
       "      <td>109</td>\n",
       "      <td>117</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>23</td>\n",
       "      <td>108</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>7</td>\n",
       "      <td>98</td>\n",
       "      <td>65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>9</td>\n",
       "      <td>106</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>80</td>\n",
       "      <td>8</td>\n",
       "      <td>135</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>15</td>\n",
       "      <td>71</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>145</td>\n",
       "      <td>114</td>\n",
       "      <td>115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>84</td>\n",
       "      <td>63</td>\n",
       "      <td>44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>N</th>\n",
       "      <td>45</td>\n",
       "      <td>33</td>\n",
       "      <td>68</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>116</td>\n",
       "      <td>145</td>\n",
       "      <td>44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>58</td>\n",
       "      <td>93</td>\n",
       "      <td>58</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>134</td>\n",
       "      <td>4</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>127</td>\n",
       "      <td>98</td>\n",
       "      <td>146</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>13</td>\n",
       "      <td>82</td>\n",
       "      <td>32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>63</td>\n",
       "      <td>33</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pytorch  Tensorflow  Keras\n",
       "A        5          84     67\n",
       "B      104          22     47\n",
       "C       62          48    148\n",
       "D       19         102     41\n",
       "E       19         100     81\n",
       "F       98         109    117\n",
       "G       23         108     12\n",
       "H        7          98     65\n",
       "I        9         106     27\n",
       "J       80           8    135\n",
       "K       15          71     21\n",
       "L      145         114    115\n",
       "M       84          63     44\n",
       "N       45          33     68\n",
       "O      116         145     44\n",
       "P       58          93     58\n",
       "Q      134           4     33\n",
       "R      127          98    146\n",
       "S       13          82     32\n",
       "T       63          33      1"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 行合并\n",
    "pd.concat([df1, df2], axis = 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "574ddc2c-3c94-4b79-acf9-279fc19bab8a",
   "metadata": {},
   "source": [
    "**df1 和 df3 合并**：考试的学生一样，属于行索引相同的 dataframe 合并"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "04023231-50f1-46d7-b4dc-8146e1332045",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "      <th>Python</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>5</td>\n",
       "      <td>84</td>\n",
       "      <td>67</td>\n",
       "      <td>1</td>\n",
       "      <td>123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>104</td>\n",
       "      <td>22</td>\n",
       "      <td>47</td>\n",
       "      <td>26</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>62</td>\n",
       "      <td>48</td>\n",
       "      <td>148</td>\n",
       "      <td>50</td>\n",
       "      <td>112</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>19</td>\n",
       "      <td>102</td>\n",
       "      <td>41</td>\n",
       "      <td>105</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>19</td>\n",
       "      <td>100</td>\n",
       "      <td>81</td>\n",
       "      <td>105</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>98</td>\n",
       "      <td>109</td>\n",
       "      <td>117</td>\n",
       "      <td>17</td>\n",
       "      <td>43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>23</td>\n",
       "      <td>108</td>\n",
       "      <td>12</td>\n",
       "      <td>141</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>7</td>\n",
       "      <td>98</td>\n",
       "      <td>65</td>\n",
       "      <td>135</td>\n",
       "      <td>47</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>9</td>\n",
       "      <td>106</td>\n",
       "      <td>27</td>\n",
       "      <td>24</td>\n",
       "      <td>46</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>80</td>\n",
       "      <td>8</td>\n",
       "      <td>135</td>\n",
       "      <td>85</td>\n",
       "      <td>54</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pytorch  Tensorflow  Keras  Python  English\n",
       "A        5          84     67       1      123\n",
       "B      104          22     47      26        9\n",
       "C       62          48    148      50      112\n",
       "D       19         102     41     105       24\n",
       "E       19         100     81     105       13\n",
       "F       98         109    117      17       43\n",
       "G       23         108     12     141       29\n",
       "H        7          98     65     135       47\n",
       "I        9         106     27      24       46\n",
       "J       80           8    135      85       54"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 列合并\n",
    "pd.concat([df1, df3], axis = 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ef18cc79-1b9b-4517-9f5f-b9d3b11d36f7",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "### 2.insert 添加列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "e8558c30-45e7-47bf-904f-a9ffffc65e56",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>89</td>\n",
       "      <td>49</td>\n",
       "      <td>123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>53</td>\n",
       "      <td>35</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>39</td>\n",
       "      <td>68</td>\n",
       "      <td>143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>79</td>\n",
       "      <td>120</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>146</td>\n",
       "      <td>4</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>136</td>\n",
       "      <td>54</td>\n",
       "      <td>130</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>107</td>\n",
       "      <td>38</td>\n",
       "      <td>51</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>35</td>\n",
       "      <td>140</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>102</td>\n",
       "      <td>85</td>\n",
       "      <td>55</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>102</td>\n",
       "      <td>54</td>\n",
       "      <td>141</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pytorch  Tensorflow  Keras\n",
       "A       89          49    123\n",
       "B       53          35     24\n",
       "C       39          68    143\n",
       "D       79         120     18\n",
       "E      146           4     29\n",
       "F      136          54    130\n",
       "G      107          38     51\n",
       "H       35         140     85\n",
       "I      102          85     55\n",
       "J      102          54    141"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 150, size=(10, 3)),\n",
    "                   index=list('ABCDEFGHIJ'),\n",
    "                   columns=['Pytorch', 'Tensorflow', 'Keras'])\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "21c99940-cf2c-4f69-91c7-6fa573e3490c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 在 dataframe 中插入一列\n",
    "# loc: 插入位置索引\n",
    "# column: 列名\n",
    "# value: 默认值\n",
    "df.insert(loc=2, column='Math', value=91)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "428cc4f7-3658-4dcf-a32d-350b4ad729d7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Math</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>89</td>\n",
       "      <td>49</td>\n",
       "      <td>91</td>\n",
       "      <td>123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>53</td>\n",
       "      <td>35</td>\n",
       "      <td>91</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>39</td>\n",
       "      <td>68</td>\n",
       "      <td>91</td>\n",
       "      <td>143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>79</td>\n",
       "      <td>120</td>\n",
       "      <td>91</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>146</td>\n",
       "      <td>4</td>\n",
       "      <td>91</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>136</td>\n",
       "      <td>54</td>\n",
       "      <td>91</td>\n",
       "      <td>130</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>107</td>\n",
       "      <td>38</td>\n",
       "      <td>91</td>\n",
       "      <td>51</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>35</td>\n",
       "      <td>140</td>\n",
       "      <td>91</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>102</td>\n",
       "      <td>85</td>\n",
       "      <td>91</td>\n",
       "      <td>55</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>102</td>\n",
       "      <td>54</td>\n",
       "      <td>91</td>\n",
       "      <td>141</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pytorch  Tensorflow  Math  Keras\n",
       "A       89          49    91    123\n",
       "B       53          35    91     24\n",
       "C       39          68    91    143\n",
       "D       79         120    91     18\n",
       "E      146           4    91     29\n",
       "F      136          54    91    130\n",
       "G      107          38    91     51\n",
       "H       35         140    91     85\n",
       "I      102          85    91     55\n",
       "J      102          54    91    141"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "228984a8-eb21-4edb-abfe-113c715b59c6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>89</td>\n",
       "      <td>49</td>\n",
       "      <td>91</td>\n",
       "      <td>78</td>\n",
       "      <td>123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>53</td>\n",
       "      <td>35</td>\n",
       "      <td>91</td>\n",
       "      <td>102</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>39</td>\n",
       "      <td>68</td>\n",
       "      <td>91</td>\n",
       "      <td>17</td>\n",
       "      <td>143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>79</td>\n",
       "      <td>120</td>\n",
       "      <td>91</td>\n",
       "      <td>28</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>146</td>\n",
       "      <td>4</td>\n",
       "      <td>91</td>\n",
       "      <td>81</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>136</td>\n",
       "      <td>54</td>\n",
       "      <td>91</td>\n",
       "      <td>142</td>\n",
       "      <td>130</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>107</td>\n",
       "      <td>38</td>\n",
       "      <td>91</td>\n",
       "      <td>83</td>\n",
       "      <td>51</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>35</td>\n",
       "      <td>140</td>\n",
       "      <td>91</td>\n",
       "      <td>48</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>102</td>\n",
       "      <td>85</td>\n",
       "      <td>91</td>\n",
       "      <td>134</td>\n",
       "      <td>55</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>102</td>\n",
       "      <td>54</td>\n",
       "      <td>91</td>\n",
       "      <td>1</td>\n",
       "      <td>141</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pytorch  Tensorflow  Math  English  Keras\n",
       "A       89          49    91       78    123\n",
       "B       53          35    91      102     24\n",
       "C       39          68    91       17    143\n",
       "D       79         120    91       28     18\n",
       "E      146           4    91       81     29\n",
       "F      136          54    91      142    130\n",
       "G      107          38    91       83     51\n",
       "H       35         140    91       48     85\n",
       "I      102          85    91      134     55\n",
       "J      102          54    91        1    141"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 获取 Math 列的后边一列的索引\n",
    "target_col_idx = list(df.columns).index('Math') + 1\n",
    "\n",
    "# 插入一个数组\n",
    "df.insert(loc=target_col_idx, column='English', value=np.random.randint(0, 150, size=10))\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0129a6db-f366-46f1-9c09-d0e18e0f371d",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "### 3.join"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "16826357-1315-449c-9133-06d7956d4836",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 该表记录 name 和 weight\n",
    "df1 = pd.DataFrame(data = {\n",
    "    'name': ['softpo', 'Daniel', 'Brandon', 'Ella'],\n",
    "    'weight': [70, 55, 75, 65]\n",
    "})\n",
    "# 该表记录 name 和 height\n",
    "df2 = pd.DataFrame(data = {\n",
    "    'name': ['softpo', 'Daniel', 'Brandon', 'Cindy'],\n",
    "    'height': [172, 170, 170, 166]\n",
    "})\n",
    "\n",
    "\n",
    "df3 = pd.DataFrame(data = {\n",
    "    '名字': ['softpo', 'Daniel', 'Brandon', 'Cindy'],\n",
    "    'height': [172, 170, 170, 166]\n",
    "})"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cde60741-8b25-4da1-9528-292beabfa218",
   "metadata": {},
   "source": [
    "观察：\n",
    "\n",
    "- df1 和 df2 具有公共列 name，可进行列合并\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2b972f7b-4683-4a99-8255-7bd4164af006",
   "metadata": {},
   "source": [
    "**列合并 df1 和 df2**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "a27d7800-98a1-41c0-a9bd-d9d681252208",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>name</th>\n",
       "      <th>weight</th>\n",
       "      <th>height</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>softpo</td>\n",
       "      <td>70</td>\n",
       "      <td>172</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Daniel</td>\n",
       "      <td>55</td>\n",
       "      <td>170</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Brandon</td>\n",
       "      <td>75</td>\n",
       "      <td>170</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      name  weight  height\n",
       "0   softpo      70     172\n",
       "1   Daniel      55     170\n",
       "2  Brandon      75     170"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 默认会找同名列进行合并\n",
    "#    如果有多个同名列，则会比较多个列即 df1.col1=df1.col1 and df1.col2=df1.col2 and ...\n",
    "pd.merge(df1, df2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "f6b7eb06-5e9d-43a7-8098-0b0aaf30ae1d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>name</th>\n",
       "      <th>weight</th>\n",
       "      <th>名字</th>\n",
       "      <th>height</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>softpo</td>\n",
       "      <td>70</td>\n",
       "      <td>softpo</td>\n",
       "      <td>172</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Daniel</td>\n",
       "      <td>55</td>\n",
       "      <td>Daniel</td>\n",
       "      <td>170</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Brandon</td>\n",
       "      <td>75</td>\n",
       "      <td>Brandon</td>\n",
       "      <td>170</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      name  weight       名字  height\n",
       "0   softpo      70   softpo     172\n",
       "1   Daniel      55   Daniel     170\n",
       "2  Brandon      75  Brandon     170"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 如果二者没有同名列，需要指定哪一列进行合并\n",
    "pd.merge(df1, df3, left_on='name', right_on='名字')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8e496d37-2b15-45e0-bd16-df2ce2f56579",
   "metadata": {},
   "source": [
    "**merge 默认根据列合并，也可指定行索引进行合并**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "d6464544-e891-417d-986d-7a7fd2a7a10b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>P1</th>\n",
       "      <th>P2</th>\n",
       "      <th>P3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>9</td>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>7</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   P1  P2  P3\n",
       "A   2   6   5\n",
       "B   5   4   6\n",
       "C   5   6   0\n",
       "D   9   4   7\n",
       "E   7   7   0"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df4 = pd.DataFrame(np.random.randint(0, 10, size=(5, 3)),\n",
    "                   index=list('ABCDE'),\n",
    "                   columns=['P1', 'P2', 'P3'])\n",
    "df4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "267be13c-aff3-4a93-abb8-845994fe7c4f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.series.Series'>\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "A    4.333333\n",
       "B    5.000000\n",
       "C    3.666667\n",
       "D    6.666667\n",
       "E    4.666667\n",
       "Name: Avg, dtype: float64"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s4 = df4.mean(axis = 1)\n",
    "print(type(s4))\n",
    "\n",
    "#添加序列名\n",
    "s4.name = 'Avg'\n",
    "\n",
    "s4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "a64a48fa-2460-4470-9a4b-7ed542b23be3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>P1</th>\n",
       "      <th>P2</th>\n",
       "      <th>P3</th>\n",
       "      <th>Avg</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>5</td>\n",
       "      <td>4.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "      <td>6</td>\n",
       "      <td>5.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>3.666667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>9</td>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "      <td>6.666667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>7</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>4.666667</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   P1  P2  P3       Avg\n",
       "A   2   6   5  4.333333\n",
       "B   5   4   6  5.000000\n",
       "C   5   6   0  3.666667\n",
       "D   9   4   7  6.666667\n",
       "E   7   7   0  4.666667"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.merge(df4, s4, left_index=True, right_index=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d58587e7-2625-4687-827a-299441a9497f",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 数据清洗"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ef45b20-01da-4425-a0fd-919e2a73b18b",
   "metadata": {},
   "source": [
    "### **重复数据**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "31ceaf6b-4c88-46e9-bbf4-9068842f795d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>red</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0    red   10.0\n",
       "1   blue   20.0\n",
       "2    red   10.0\n",
       "3  green   15.0\n",
       "4   blue   20.0\n",
       "5   None    0.0\n",
       "6    red    NaN"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\n",
    "    'color': ['red', 'blue', 'red', 'green', 'blue', None, 'red'],\n",
    "    'price': [10, 20, 10, 15, 20, 0, np.NaN]\n",
    "})\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "3f3a00e5-9c2c-4825-8e9c-63cbd4eeb69d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    False\n",
       "1    False\n",
       "2     True\n",
       "3    False\n",
       "4     True\n",
       "5    False\n",
       "6    False\n",
       "dtype: bool"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#判断是否存在重复数据，这里的数据表示整行重复而非单个数据重复\n",
    "df.duplicated()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "0be42219-083d-48ec-a2a1-71c933a4f9e3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>red</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0    red   10.0\n",
       "1   blue   20.0\n",
       "3  green   15.0\n",
       "5   None    0.0\n",
       "6    red    NaN"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#删除重复数据，返回拷贝的数组\n",
    "df.drop_duplicates()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "567252f3-0d95-404b-a2ce-871e4db211aa",
   "metadata": {},
   "source": [
    "### **空数据**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "bf36bb64-6f74-4f02-aecd-f4af16115bb9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>red</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0    red   10.0\n",
       "1   blue   20.0\n",
       "2    red   10.0\n",
       "3  green   15.0\n",
       "4   blue   20.0\n",
       "5   None    0.0\n",
       "6    red    NaN"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\n",
    "    'color': ['red', 'blue', 'red', 'green', 'blue', None, 'red'],\n",
    "    'price': [10, 20, 10, 15, 20, 0, np.NaN]\n",
    "})\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "4806eb88-336a-4529-8a62-0ba068cd09b6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0  False  False\n",
       "1  False  False\n",
       "2  False  False\n",
       "3  False  False\n",
       "4  False  False\n",
       "5   True  False\n",
       "6  False   True"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看空数据。什么是空？ None、np.NaN 等\n",
    "df.isnull()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "82f82532-85fe-4481-abf2-f117bb0f7590",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0    red   10.0\n",
       "1   blue   20.0\n",
       "2    red   10.0\n",
       "3  green   15.0\n",
       "4   blue   20.0"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#删除空数据，返回拷贝的数组\n",
    "df.dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "467a2fe4-5f0d-4d52-b98f-f9e1962ee98e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>red</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0    red   10.0\n",
       "1   blue   20.0\n",
       "2    red   10.0\n",
       "3  green   15.0\n",
       "4   blue   20.0\n",
       "5      0    0.0\n",
       "6    red    0.0"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#填充空数据，返回拷贝的数组\n",
    "df.fillna(0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fc637b09-bdcd-4251-82e1-ab32c6bc5400",
   "metadata": {},
   "source": [
    "### **指定行或列删除**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "b7d4b39d-8e34-4e0c-8440-9da57551cc4f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>red</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0    red   10.0\n",
       "1   blue   20.0\n",
       "2    red   10.0\n",
       "3  green   15.0\n",
       "4   blue   20.0\n",
       "5   None    0.0\n",
       "6    red    NaN"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\n",
    "    'color': ['red', 'blue', 'red', 'green', 'blue', None, 'red'],\n",
    "    'price': [10, 20, 10, 15, 20, 0, np.NaN]\n",
    "})\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "0ac89882-d39b-4707-8c92-7e62c3e3ed2c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>red</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0    red   10.0\n",
       "1   blue   20.0\n",
       "2    red   10.0\n",
       "3  green   15.0\n",
       "4   blue   20.0\n",
       "5   None    0.0\n",
       "6    red    NaN"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#删除列，在原对象上删除\n",
    "#del df['color']\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "55511290-a55a-4a0a-80f5-d413ee24e8ec",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>red</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>blue</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>red</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color\n",
       "0    red\n",
       "1   blue\n",
       "2    red\n",
       "3  green\n",
       "4   blue\n",
       "5   None\n",
       "6    red"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 删除指定列，返回拷贝的对象\n",
    "df.drop(labels=['price'], axis = 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "fee8a8af-9566-4f1b-ac52-48d9e7593421",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>red</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  color  price\n",
       "2   red   10.0\n",
       "4  blue   20.0\n",
       "5  None    0.0\n",
       "6   red    NaN"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 删除指定行，返回拷贝的对象\n",
    "df.drop(labels=[0,1,3], axis=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0847243e-4ae2-491f-bbf2-21cb056d58c3",
   "metadata": {},
   "source": [
    "### **filter 过滤函数**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "d9364efe-d91e-4cbe-9775-c6249d8bdc18",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>China</th>\n",
       "      <th>America</th>\n",
       "      <th>France</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>dog</th>\n",
       "      <td>3</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>cat</th>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     China  America  France\n",
       "dog      3        7       1\n",
       "cat      2        8     256"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.array([[3, 7, 1], [2, 8, 256]]),\n",
    "                  index=['dog', 'cat'],\n",
    "                  columns=['China', 'America', 'France'])\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "3a12e969-9c80-429c-95ff-5cc0b36a9efa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>China</th>\n",
       "      <th>France</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>dog</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>cat</th>\n",
       "      <td>2</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     China  France\n",
       "dog      3       1\n",
       "cat      2     256"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#指定列\n",
    "df.filter(items=['China', 'France'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "c003dad5-361b-4d33-afbd-bf9fd6c46bdf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>China</th>\n",
       "      <th>America</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>dog</th>\n",
       "      <td>3</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>cat</th>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     China  America\n",
       "dog      3        7\n",
       "cat      2        8"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#过滤索引名以 a 结尾 的列，因为指定了 axis=1 表示列\n",
    "df.filter(regex='a$', axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "c3213dd5-87b5-4fcd-963b-45fc087f1df6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>China</th>\n",
       "      <th>America</th>\n",
       "      <th>France</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>dog</th>\n",
       "      <td>3</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     China  America  France\n",
       "dog      3        7       1"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#过滤索引名中包含 og 的行，因为指定了 axis=0 表示行\n",
    "df.filter(like='og', axis=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4140bd33-1cd0-4af1-bde5-3975d10ce828",
   "metadata": {},
   "source": [
    "### **异常值过滤**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "52a3e7f4-9f53-4492-8dff-359fbb55307a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.476622</td>\n",
       "      <td>-0.690431</td>\n",
       "      <td>2.109501</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.372545</td>\n",
       "      <td>-0.708850</td>\n",
       "      <td>0.896271</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2.111709</td>\n",
       "      <td>0.403823</td>\n",
       "      <td>0.349270</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.769361</td>\n",
       "      <td>-1.891514</td>\n",
       "      <td>0.126784</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.176686</td>\n",
       "      <td>0.220819</td>\n",
       "      <td>0.735687</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2\n",
       "0 -0.476622 -0.690431  2.109501\n",
       "1 -0.372545 -0.708850  0.896271\n",
       "2  2.111709  0.403823  0.349270\n",
       "3  0.769361 -1.891514  0.126784\n",
       "4  0.176686  0.220819  0.735687"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = pd.DataFrame(np.random.randn(10000,3))\n",
    "df2.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "4f0988e4-cb6e-446d-ade0-05299540b1cf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    0.007925\n",
       "1   -0.000781\n",
       "2   -0.001886\n",
       "dtype: float64"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#列平均值\n",
    "df2.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "47d19507-1d01-46cf-a04f-873750bae28f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    1.001193\n",
       "1    1.008035\n",
       "2    1.000891\n",
       "dtype: float64"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#列标准差\n",
    "df2.std()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "89651b30-4be7-40ab-bb0b-b516432dfd29",
   "metadata": {},
   "source": [
    "**假设**：\n",
    "<font size=4>$\\sigma$</font> 表示标准差\n",
    "，如果正态分布值大于<font size=4>$3\\sigma$</font>，则判定为异常值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "d5e1983f-80f0-45ec-9efb-80dd5c86a408",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>3.155295</td>\n",
       "      <td>0.567402</td>\n",
       "      <td>0.684609</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1275</th>\n",
       "      <td>3.277199</td>\n",
       "      <td>-1.315754</td>\n",
       "      <td>-0.245135</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1370</th>\n",
       "      <td>-3.112435</td>\n",
       "      <td>-0.630021</td>\n",
       "      <td>0.584885</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1544</th>\n",
       "      <td>-3.379654</td>\n",
       "      <td>-0.359787</td>\n",
       "      <td>-0.382389</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2405</th>\n",
       "      <td>3.219653</td>\n",
       "      <td>-0.322577</td>\n",
       "      <td>-0.554391</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             0         1         2\n",
       "55    3.155295  0.567402  0.684609\n",
       "1275  3.277199 -1.315754 -0.245135\n",
       "1370 -3.112435 -0.630021  0.584885\n",
       "1544 -3.379654 -0.359787 -0.382389\n",
       "2405  3.219653 -0.322577 -0.554391"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cond = df2.abs() > 3 * df2.std()\n",
    "\n",
    "#查看第一列异常值。注意：dataframe[i] 用来取列\n",
    "df2[cond[0]].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "7728789d-38f6-45a4-8266-cbcb21ce1f4c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>3.155295</td>\n",
       "      <td>0.567402</td>\n",
       "      <td>0.684609</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>87</th>\n",
       "      <td>-0.471371</td>\n",
       "      <td>3.667805</td>\n",
       "      <td>-0.685981</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>135</th>\n",
       "      <td>-1.326365</td>\n",
       "      <td>-3.046920</td>\n",
       "      <td>1.753696</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>296</th>\n",
       "      <td>-1.095943</td>\n",
       "      <td>-1.787688</td>\n",
       "      <td>3.077572</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>436</th>\n",
       "      <td>-0.182155</td>\n",
       "      <td>-3.504172</td>\n",
       "      <td>0.153829</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            0         1         2\n",
       "55   3.155295  0.567402  0.684609\n",
       "87  -0.471371  3.667805 -0.685981\n",
       "135 -1.326365 -3.046920  1.753696\n",
       "296 -1.095943 -1.787688  3.077572\n",
       "436 -0.182155 -3.504172  0.153829"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看每一列的异常值\n",
    "condn = cond[0] | cond[1] | cond[2]\n",
    "df2[condn].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "fa62879b-6d0d-49ae-97e8-fca66c315024",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>3.155295</td>\n",
       "      <td>0.567402</td>\n",
       "      <td>0.684609</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>87</th>\n",
       "      <td>-0.471371</td>\n",
       "      <td>3.667805</td>\n",
       "      <td>-0.685981</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>135</th>\n",
       "      <td>-1.326365</td>\n",
       "      <td>-3.046920</td>\n",
       "      <td>1.753696</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>296</th>\n",
       "      <td>-1.095943</td>\n",
       "      <td>-1.787688</td>\n",
       "      <td>3.077572</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>436</th>\n",
       "      <td>-0.182155</td>\n",
       "      <td>-3.504172</td>\n",
       "      <td>0.153829</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            0         1         2\n",
       "55   3.155295  0.567402  0.684609\n",
       "87  -0.471371  3.667805 -0.685981\n",
       "135 -1.326365 -3.046920  1.753696\n",
       "296 -1.095943 -1.787688  3.077572\n",
       "436 -0.182155 -3.504172  0.153829"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#另一种方式查看每一列的异常值\n",
    "c2 = cond.any(axis=1)\n",
    "df2[c2].head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e2e489b7-68f8-4016-ae14-01ef0e16bae5",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 数据转换"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "850cb4e0-2a4d-42f1-9430-506451b6b0c2",
   "metadata": {},
   "source": [
    "### 轴和元素的替换"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "79f068aa-1316-41f4-a0b6-080930175a61",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>4</td>\n",
       "      <td>9</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras\n",
       "A       4           5    8.0\n",
       "B       6           4    4.0\n",
       "C       7           2    9.0\n",
       "D       4           9    4.0\n",
       "E       3           4    NaN\n",
       "F       1           2    1.0\n",
       "G       1           1    3.0\n",
       "H       1           6    6.0\n",
       "I       3           2    6.0\n",
       "J       8           0    7.0"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 10, size=(10,3)),\n",
    "                  index=list('ABCDEFGHIJ'),\n",
    "                  columns=['Python', 'Tensorflow', 'Keras'])\n",
    "\n",
    "#赋空值\n",
    "df.iloc[4, 2] = None\n",
    "\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "010bdae2-485c-4221-a01c-5345f6357c0f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>人工智能</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A2</th>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B2</th>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>4</td>\n",
       "      <td>9</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    人工智能  Tensorflow  Keras\n",
       "A2     4           5    8.0\n",
       "B2     6           4    4.0\n",
       "C      7           2    9.0\n",
       "D      4           9    4.0\n",
       "E      3           4    NaN\n",
       "F      1           2    1.0\n",
       "G      1           1    3.0\n",
       "H      1           6    6.0\n",
       "I      3           2    6.0\n",
       "J      8           0    7.0"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#重命名行、列索引，返回拷贝的新对象\n",
    "df.rename(index = {'A': 'A2', 'B': 'B2'},\n",
    "          columns={'Python': '人工智能'})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "8d8829ba-b97a-4c6f-8437-3b7ba218fe1c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>4</td>\n",
       "      <td>1024</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>4</td>\n",
       "      <td>9</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras\n",
       "A       4        1024    8.0\n",
       "B       6           4    4.0\n",
       "C       7           2    9.0\n",
       "D       4           9    4.0\n",
       "E       3           4    NaN\n",
       "F       1           2    1.0\n",
       "G       1           1    3.0\n",
       "H       1           6    6.0\n",
       "I       3           2    6.0\n",
       "J       8           0    7.0"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 替换值。范围是所有元素，如果匹配上则替换。返回拷贝的新对象\n",
    "df.replace(5, 1024)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "260fe416-bb35-445f-88a8-fa85ab0e9cc3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>4</td>\n",
       "      <td>1024</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>4</td>\n",
       "      <td>9</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>1024</td>\n",
       "      <td>4</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1024.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>1024</td>\n",
       "      <td>2</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow   Keras\n",
       "A       4        1024     8.0\n",
       "B       6           4     4.0\n",
       "C       7           2     9.0\n",
       "D       4           9     4.0\n",
       "E    1024           4     NaN\n",
       "F       1           2     1.0\n",
       "G       1           1  1024.0\n",
       "H       1           6     6.0\n",
       "I    1024           2     6.0\n",
       "J       8           0     7.0"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 对多个元素进行替换\n",
    "df.replace([3, 5], 1024)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "45c5bcec-7790-4915-a7c6-dc419e1da0ed",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>4</td>\n",
       "      <td>9999</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>4</td>\n",
       "      <td>9</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>-1000</td>\n",
       "      <td>4</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>-1000.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>-1000</td>\n",
       "      <td>2</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow   Keras\n",
       "A       4        9999     8.0\n",
       "B       6           4     4.0\n",
       "C       7           2     9.0\n",
       "D       4           9     4.0\n",
       "E   -1000           4     NaN\n",
       "F       1           2     1.0\n",
       "G       1           1 -1000.0\n",
       "H       1           6     6.0\n",
       "I   -1000           2     6.0\n",
       "J       8           0     7.0"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 指定多个替换对儿\n",
    "df.replace({3 : -1000, 5 : 9999})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "94a78102-1c1a-4691-9080-c0095d4746e1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>6666</td>\n",
       "      <td>4</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>4</td>\n",
       "      <td>9</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras\n",
       "A       4           5    8.0\n",
       "B    6666           4    4.0\n",
       "C       7           2    9.0\n",
       "D       4           9    4.0\n",
       "E       3           4    NaN\n",
       "F       1           2    1.0\n",
       "G       1           1    3.0\n",
       "H       1           6    6.0\n",
       "I       3           2    6.0\n",
       "J       8           0    7.0"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 对某一列进行替换\n",
    "df.replace({'Python' : 6}, 6666)\n",
    "\n",
    "# 对某一列多个元素进行替换\n",
    "#df.replace({'Python' : [4, 5]}, 6666)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a05d5db5-ae25-4d41-8153-981ddee4428c",
   "metadata": {},
   "source": [
    "### map 修改元素"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "65f1b9cc-7c8c-4c69-9d0f-83f7f3ce4052",
   "metadata": {},
   "source": [
    "#### **Series 对象**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "5bd64ec8-2db0-4587-b4e1-ddc819c67edf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    9\n",
       "B    1\n",
       "C    8\n",
       "D    4\n",
       "E    7\n",
       "F    3\n",
       "G    3\n",
       "H    2\n",
       "I    3\n",
       "J    3\n",
       "Name: Keras, dtype: int64"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 10, size=(10,3)),\n",
    "                  index=list('ABCDEFGHIJ'),\n",
    "                  columns=['Python', 'Tensorflow', 'Keras'])\n",
    "\n",
    "s = df['Keras']\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "4c6e21f5-9b60-49e3-9250-2cc4ef360eac",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A      NaN\n",
       "B    Hello\n",
       "C      NaN\n",
       "D      NaN\n",
       "E       AI\n",
       "F      NaN\n",
       "G      NaN\n",
       "H      NaN\n",
       "I      NaN\n",
       "J      NaN\n",
       "Name: Keras, dtype: object"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#字典映射\n",
    "s.map({1: 'Hello', 5: 'World', 7: 'AI'})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "8c5e7ae5-0199-40d9-8bcd-7dd49c5922f2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A        9\n",
       "B    Hello\n",
       "C        8\n",
       "D        4\n",
       "E       AI\n",
       "F        3\n",
       "G        3\n",
       "H        2\n",
       "I        3\n",
       "J        3\n",
       "Name: Keras, dtype: object"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#字典映射2，如果不存在映射则不改变值\n",
    "\n",
    "def convert(x):\n",
    "    d = {1: 'Hello', 5: 'World', 7: 'AI'}\n",
    "    return d[x] if d.get(x) != None else x\n",
    "\n",
    "s.map(convert)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "d9331b9f-3f30-4c6c-8839-881aaed13ff3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A        9\n",
       "B    Hello\n",
       "C        8\n",
       "D        4\n",
       "E       AI\n",
       "F        3\n",
       "G        3\n",
       "H        2\n",
       "I        3\n",
       "J        3\n",
       "Name: Keras, dtype: object"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#隐式函数\n",
    "d = {1: 'Hello', 5: 'World', 7: 'AI'}\n",
    "s.map(lambda x:d.get(x) if d.get(x) != None else x)\n",
    "#s.map(lambda x:True if x >= 5 else False)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4d491077-b116-4ada-8d2f-a89a8ad8c836",
   "metadata": {},
   "source": [
    "#### **DataFrame 对象**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "0b737b1f-489d-45dd-a973-eec733395d87",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>66</td>\n",
       "      <td>43</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>99</td>\n",
       "      <td>44</td>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>54</td>\n",
       "      <td>70</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>56</td>\n",
       "      <td>48</td>\n",
       "      <td>95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>81</td>\n",
       "      <td>40</td>\n",
       "      <td>77</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A      66    43       33\n",
       "B      99    44       34\n",
       "C      54    70       10\n",
       "D      56    48       95\n",
       "E      81    40       77"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>76</td>\n",
       "      <td>53</td>\n",
       "      <td>43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>109</td>\n",
       "      <td>54</td>\n",
       "      <td>44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>64</td>\n",
       "      <td>80</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>66</td>\n",
       "      <td>58</td>\n",
       "      <td>105</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>91</td>\n",
       "      <td>50</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A      76    53       43\n",
       "B     109    54       44\n",
       "C      64    80       20\n",
       "D      66    58      105\n",
       "E      91    50       87"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(10, 3)),\n",
    "                  index=list('ABCDEFGHIJ'),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "display(df.head())\n",
    "\n",
    "df = df.map(lambda  x: x + 10)\n",
    "\n",
    "display(df.head())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e894ce7a-cc48-4947-9005-5cf36d8094d4",
   "metadata": {},
   "source": [
    "### apply 修改元素"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "97f6aaea-79c2-4506-b017-4a1320ded61c",
   "metadata": {},
   "source": [
    "#### **Series 对象**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "4f83242a-612f-4e07-a557-74f84cb378d9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0     优秀\n",
       "1     优秀\n",
       "2    不及格\n",
       "3     中等\n",
       "4     优秀\n",
       "5    不及格\n",
       "6    不及格\n",
       "7    不及格\n",
       "8    不及格\n",
       "9    不及格\n",
       "Name: Python, dtype: object"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Python程度</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>85</td>\n",
       "      <td>优秀</td>\n",
       "      <td>57</td>\n",
       "      <td>53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>91</td>\n",
       "      <td>优秀</td>\n",
       "      <td>21</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>不及格</td>\n",
       "      <td>60</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>75</td>\n",
       "      <td>中等</td>\n",
       "      <td>5</td>\n",
       "      <td>73</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>89</td>\n",
       "      <td>优秀</td>\n",
       "      <td>88</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>27</td>\n",
       "      <td>不及格</td>\n",
       "      <td>38</td>\n",
       "      <td>96</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>51</td>\n",
       "      <td>不及格</td>\n",
       "      <td>31</td>\n",
       "      <td>47</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>34</td>\n",
       "      <td>不及格</td>\n",
       "      <td>56</td>\n",
       "      <td>57</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>47</td>\n",
       "      <td>不及格</td>\n",
       "      <td>6</td>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>42</td>\n",
       "      <td>不及格</td>\n",
       "      <td>66</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python Python程度  Math  English\n",
       "0      85       优秀    57       53\n",
       "1      91       优秀    21       63\n",
       "2       1      不及格    60        1\n",
       "3      75       中等     5       73\n",
       "4      89       优秀    88       23\n",
       "5      27      不及格    38       96\n",
       "6      51      不及格    31       47\n",
       "7      34      不及格    56       57\n",
       "8      47      不及格     6       34\n",
       "9      42      不及格    66       63"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "df = pd.DataFrame(np.random.randint(0, 100, size=(30, 3)),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "s = df['Python']\n",
    "\n",
    "#--------------------\n",
    "\n",
    "#定义规则函数\n",
    "def convert(x):\n",
    "    if x < 60:\n",
    "        return '不及格'\n",
    "    elif x < 80:\n",
    "        return '中等'\n",
    "    else:\n",
    "        return '优秀'\n",
    "\n",
    "#使用 series.apply 方法、根据规则函数获取学生的 Python 程度\n",
    "res = s.apply(convert)\n",
    "display(res.head(10))\n",
    "\n",
    "#--------------------\n",
    "\n",
    "# 将得到的列插入原表\n",
    "target_col_idx = list(df.columns).index('Python') + 1\n",
    "df.insert(loc=target_col_idx, column='Python程度', value=res)\n",
    "df.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "6b1fb3cb-1ccc-4e7a-b64d-36876fa11b4d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>16</td>\n",
       "      <td>32</td>\n",
       "      <td>76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>96</td>\n",
       "      <td>61</td>\n",
       "      <td>91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4</td>\n",
       "      <td>6</td>\n",
       "      <td>94</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>44</td>\n",
       "      <td>74</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>62</td>\n",
       "      <td>43</td>\n",
       "      <td>64</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "0      16    32       76\n",
       "1      96    61       91\n",
       "2       4     6       94\n",
       "3      44    74        8\n",
       "4      62    43       64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>26</td>\n",
       "      <td>32</td>\n",
       "      <td>76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>106</td>\n",
       "      <td>61</td>\n",
       "      <td>91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14</td>\n",
       "      <td>6</td>\n",
       "      <td>94</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>54</td>\n",
       "      <td>74</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>72</td>\n",
       "      <td>43</td>\n",
       "      <td>64</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "0      26    32       76\n",
       "1     106    61       91\n",
       "2      14     6       94\n",
       "3      54    74        8\n",
       "4      72    43       64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(30, 3)),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "s = df['Python']\n",
    "\n",
    "display(df.head(5))\n",
    "\n",
    "# apply 隐式函数\n",
    "df['Python'] = s.apply(lambda x : x + 10)\n",
    "display(df.head(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "27070704-6803-4a6f-8e6d-4c68cdde5a11",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Python程度</th>\n",
       "      <th>Math</th>\n",
       "      <th>Math程度</th>\n",
       "      <th>English</th>\n",
       "      <th>English程度</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>85</td>\n",
       "      <td>优秀</td>\n",
       "      <td>20</td>\n",
       "      <td>不及格</td>\n",
       "      <td>69</td>\n",
       "      <td>中等</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>15</td>\n",
       "      <td>不及格</td>\n",
       "      <td>87</td>\n",
       "      <td>优秀</td>\n",
       "      <td>4</td>\n",
       "      <td>不及格</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>24</td>\n",
       "      <td>不及格</td>\n",
       "      <td>50</td>\n",
       "      <td>不及格</td>\n",
       "      <td>54</td>\n",
       "      <td>不及格</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>88</td>\n",
       "      <td>优秀</td>\n",
       "      <td>15</td>\n",
       "      <td>不及格</td>\n",
       "      <td>30</td>\n",
       "      <td>不及格</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>99</td>\n",
       "      <td>优秀</td>\n",
       "      <td>64</td>\n",
       "      <td>中等</td>\n",
       "      <td>45</td>\n",
       "      <td>不及格</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>71</td>\n",
       "      <td>中等</td>\n",
       "      <td>40</td>\n",
       "      <td>不及格</td>\n",
       "      <td>30</td>\n",
       "      <td>不及格</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>12</td>\n",
       "      <td>不及格</td>\n",
       "      <td>48</td>\n",
       "      <td>不及格</td>\n",
       "      <td>8</td>\n",
       "      <td>不及格</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>23</td>\n",
       "      <td>不及格</td>\n",
       "      <td>49</td>\n",
       "      <td>不及格</td>\n",
       "      <td>44</td>\n",
       "      <td>不及格</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>7</td>\n",
       "      <td>不及格</td>\n",
       "      <td>32</td>\n",
       "      <td>不及格</td>\n",
       "      <td>57</td>\n",
       "      <td>不及格</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>68</td>\n",
       "      <td>中等</td>\n",
       "      <td>39</td>\n",
       "      <td>不及格</td>\n",
       "      <td>80</td>\n",
       "      <td>优秀</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python Python程度  Math Math程度  English English程度\n",
       "0      85       优秀    20    不及格       69        中等\n",
       "1      15      不及格    87     优秀        4       不及格\n",
       "2      24      不及格    50    不及格       54       不及格\n",
       "3      88       优秀    15    不及格       30       不及格\n",
       "4      99       优秀    64     中等       45       不及格\n",
       "5      71       中等    40    不及格       30       不及格\n",
       "6      12      不及格    48    不及格        8       不及格\n",
       "7      23      不及格    49    不及格       44       不及格\n",
       "8       7      不及格    32    不及格       57       不及格\n",
       "9      68       中等    39    不及格       80        优秀"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#多列转换\n",
    "#成绩表\n",
    "df = pd.DataFrame(np.random.randint(0, 100, size=(30, 3)),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "#定义规则函数\n",
    "def convert(x):\n",
    "    if x < 60:\n",
    "        return '不及格'\n",
    "    elif x < 80:\n",
    "        return '中等'\n",
    "    else:\n",
    "        return '优秀'\n",
    "\n",
    "for course in df.columns:\n",
    "    s = df[course]\n",
    "    #使用 series.apply 方法、根据规则函数获取学生的 Python 程度\n",
    "    res = s.apply(convert)\n",
    "    \n",
    "    # 将得到的列插入原表\n",
    "    target_col_idx = list(df.columns).index(course) + 1\n",
    "    df.insert(loc=target_col_idx, column=course + '程度', value=res)\n",
    "df.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "746309a5-d6c1-4db0-9029-5476017faafc",
   "metadata": {},
   "source": [
    "#### **DataFrame 对象**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "3a14f669-6f3a-43cf-b77a-10174f08a255",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>37</td>\n",
       "      <td>54</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>52</td>\n",
       "      <td>50</td>\n",
       "      <td>91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>86</td>\n",
       "      <td>46</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>51</td>\n",
       "      <td>50</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>43</td>\n",
       "      <td>33</td>\n",
       "      <td>99</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "0      37    54       72\n",
       "1      52    50       91\n",
       "2      86    46        2\n",
       "3      51    50       22\n",
       "4      43    33       99"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>47</td>\n",
       "      <td>54</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>62</td>\n",
       "      <td>50</td>\n",
       "      <td>91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>96</td>\n",
       "      <td>46</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>61</td>\n",
       "      <td>50</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>53</td>\n",
       "      <td>33</td>\n",
       "      <td>99</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "0      47    54       72\n",
       "1      62    50       91\n",
       "2      96    46        2\n",
       "3      61    50       22\n",
       "4      53    33       99"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(30, 3)),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "s = df['Python']\n",
    "\n",
    "display(df.head(5))\n",
    "\n",
    "# apply 隐式函数\n",
    "df['Python'] = s.map(lambda x : x + 10)\n",
    "display(df.head(5))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8f752e7b-4ea0-4e45-a367-579c9576210c",
   "metadata": {},
   "source": [
    "旧的 applymap 方法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "d2983d9c-c761-4c60-a1a0-27932a33f1f5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>58</td>\n",
       "      <td>93</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>76</td>\n",
       "      <td>63</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>45</td>\n",
       "      <td>80</td>\n",
       "      <td>57</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>33</td>\n",
       "      <td>67</td>\n",
       "      <td>54</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>74</td>\n",
       "      <td>47</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A      58    93        0\n",
       "B      76    63        7\n",
       "C      45    80       57\n",
       "D      33    67       54\n",
       "E      74    47       90"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/tmp/ipykernel_3916/1677535660.py:7: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda  x: x + 10)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>68</td>\n",
       "      <td>103</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>86</td>\n",
       "      <td>73</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>55</td>\n",
       "      <td>90</td>\n",
       "      <td>67</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>43</td>\n",
       "      <td>77</td>\n",
       "      <td>64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>84</td>\n",
       "      <td>57</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A      68   103       10\n",
       "B      86    73       17\n",
       "C      55    90       67\n",
       "D      43    77       64\n",
       "E      84    57      100"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(10, 3)),\n",
    "                  index=list('ABCDEFGHIJ'),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "display(df.head())\n",
    "\n",
    "#DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
    "df = df.applymap(lambda  x: x + 10)\n",
    "\n",
    "display(df.head())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "73a48348-820f-4750-a527-7da163b00586",
   "metadata": {},
   "source": [
    "### transform 数据变形\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d1ab0585-7c0b-45ca-8886-1ecd88653a18",
   "metadata": {},
   "source": [
    "#### Series 对象"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "79093a45-3a47-4e24-8788-894e525973d9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>81</td>\n",
       "      <td>55</td>\n",
       "      <td>52</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>31</td>\n",
       "      <td>81</td>\n",
       "      <td>44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>31</td>\n",
       "      <td>97</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>81</td>\n",
       "      <td>40</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>98</td>\n",
       "      <td>23</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>26</td>\n",
       "      <td>12</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>4</td>\n",
       "      <td>21</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>53</td>\n",
       "      <td>5</td>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>62</td>\n",
       "      <td>4</td>\n",
       "      <td>95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>44</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "0      81    55       52\n",
       "1      31    81       44\n",
       "2       3    31       97\n",
       "3      81    40       15\n",
       "4      98    23       15\n",
       "5      26    12       49\n",
       "6       4    21       63\n",
       "7      53     5       34\n",
       "8      62     4       95\n",
       "9       0     6       44"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(10, 3)),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "8d1ba4b5-a809-455e-b07d-2ba5874a1614",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0     91\n",
       "1     41\n",
       "2     13\n",
       "3     91\n",
       "4    108\n",
       "5     36\n",
       "6     14\n",
       "7     63\n",
       "8     72\n",
       "9     10\n",
       "Name: Python, dtype: int64"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['Python'].transform(lambda x:x+10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "614e4656-cbad-4ca0-ab05-12dcf35a4fc1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>&lt;lambda&gt;</th>\n",
       "      <th>cb</th>\n",
       "      <th>exp</th>\n",
       "      <th>sqrt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>91</td>\n",
       "      <td>75</td>\n",
       "      <td>1.506097e+35</td>\n",
       "      <td>9.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>41</td>\n",
       "      <td>25</td>\n",
       "      <td>2.904885e+13</td>\n",
       "      <td>5.567764</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>13</td>\n",
       "      <td>25</td>\n",
       "      <td>2.008554e+01</td>\n",
       "      <td>1.732051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>91</td>\n",
       "      <td>75</td>\n",
       "      <td>1.506097e+35</td>\n",
       "      <td>9.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>108</td>\n",
       "      <td>75</td>\n",
       "      <td>3.637971e+42</td>\n",
       "      <td>9.899495</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>36</td>\n",
       "      <td>25</td>\n",
       "      <td>1.957296e+11</td>\n",
       "      <td>5.099020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>14</td>\n",
       "      <td>25</td>\n",
       "      <td>5.459815e+01</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>63</td>\n",
       "      <td>75</td>\n",
       "      <td>1.041376e+23</td>\n",
       "      <td>7.280110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>72</td>\n",
       "      <td>75</td>\n",
       "      <td>8.438357e+26</td>\n",
       "      <td>7.874008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>25</td>\n",
       "      <td>1.000000e+00</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   <lambda>  cb           exp      sqrt\n",
       "0        91  75  1.506097e+35  9.000000\n",
       "1        41  25  2.904885e+13  5.567764\n",
       "2        13  25  2.008554e+01  1.732051\n",
       "3        91  75  1.506097e+35  9.000000\n",
       "4       108  75  3.637971e+42  9.899495\n",
       "5        36  25  1.957296e+11  5.099020\n",
       "6        14  25  5.459815e+01  2.000000\n",
       "7        63  75  1.041376e+23  7.280110\n",
       "8        72  75  8.438357e+26  7.874008\n",
       "9        10  25  1.000000e+00  0.000000"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def cb(x):\n",
    "    return 25 if x <= 50 else 75\n",
    "\n",
    "df['Python'].transform([lambda x:x+10, cb, np.exp, np. sqrt])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "31c2d38c-12ba-4224-b15a-0cbc734535bb",
   "metadata": {},
   "source": [
    "#### DataFrame 对象"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "id": "8ee434b3-b56c-4252-9090-fae796f83243",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>73</td>\n",
       "      <td>13</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>73</td>\n",
       "      <td>51</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>93</td>\n",
       "      <td>75</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>16</td>\n",
       "      <td>50</td>\n",
       "      <td>97</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>74</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>74</td>\n",
       "      <td>45</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>50</td>\n",
       "      <td>75</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>61</td>\n",
       "      <td>49</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>38</td>\n",
       "      <td>92</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>44</td>\n",
       "      <td>85</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "0      73    13       84\n",
       "1      73    51       84\n",
       "2      93    75       17\n",
       "3      16    50       97\n",
       "4       5    74       60\n",
       "5      74    45        7\n",
       "6      50    75        9\n",
       "7      61    49       14\n",
       "8      38    92       28\n",
       "9      44    85       84"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(10, 3)),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "546ce7b5-d0f9-4f35-a883-2375136ac74e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>83</td>\n",
       "      <td>23</td>\n",
       "      <td>94</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>83</td>\n",
       "      <td>61</td>\n",
       "      <td>94</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>103</td>\n",
       "      <td>85</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>26</td>\n",
       "      <td>60</td>\n",
       "      <td>107</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>15</td>\n",
       "      <td>84</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>84</td>\n",
       "      <td>55</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>60</td>\n",
       "      <td>85</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>71</td>\n",
       "      <td>59</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>48</td>\n",
       "      <td>102</td>\n",
       "      <td>38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>54</td>\n",
       "      <td>95</td>\n",
       "      <td>94</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "0      83    23       94\n",
       "1      83    61       94\n",
       "2     103    85       27\n",
       "3      26    60      107\n",
       "4      15    84       70\n",
       "5      84    55       17\n",
       "6      60    85       19\n",
       "7      71    59       24\n",
       "8      48   102       38\n",
       "9      54    95       94"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.transform(lambda x:x+10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "2bdbb34f-0caa-4dad-9730-bdfd69cf4f25",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>8.544004</td>\n",
       "      <td>4.424134e+05</td>\n",
       "      <td>94</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>8.544004</td>\n",
       "      <td>1.409349e+22</td>\n",
       "      <td>94</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>9.643651</td>\n",
       "      <td>3.733242e+32</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.000000</td>\n",
       "      <td>5.184706e+21</td>\n",
       "      <td>107</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.236068</td>\n",
       "      <td>1.373383e+32</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>8.602325</td>\n",
       "      <td>3.493427e+19</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7.071068</td>\n",
       "      <td>3.733242e+32</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>7.810250</td>\n",
       "      <td>1.907347e+21</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>6.164414</td>\n",
       "      <td>9.017628e+39</td>\n",
       "      <td>38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>6.633250</td>\n",
       "      <td>8.223013e+36</td>\n",
       "      <td>94</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     Python          Math  English\n",
       "0  8.544004  4.424134e+05       94\n",
       "1  8.544004  1.409349e+22       94\n",
       "2  9.643651  3.733242e+32       27\n",
       "3  4.000000  5.184706e+21      107\n",
       "4  2.236068  1.373383e+32       70\n",
       "5  8.602325  3.493427e+19       17\n",
       "6  7.071068  3.733242e+32       19\n",
       "7  7.810250  1.907347e+21       24\n",
       "8  6.164414  9.017628e+39       38\n",
       "9  6.633250  8.223013e+36       94"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#对多列指定不同的操作\n",
    "df.transform({'Python': np.sqrt, 'Math': np.exp, 'English': lambda x:x+10})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "id": "d26df2ba-4b55-474a-982d-e1031683e92f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"4\" halign=\"left\">Python</th>\n",
       "      <th colspan=\"4\" halign=\"left\">Math</th>\n",
       "      <th colspan=\"4\" halign=\"left\">English</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>&lt;lambda&gt;</th>\n",
       "      <th>cb</th>\n",
       "      <th>exp</th>\n",
       "      <th>sqrt</th>\n",
       "      <th>&lt;lambda&gt;</th>\n",
       "      <th>cb</th>\n",
       "      <th>exp</th>\n",
       "      <th>sqrt</th>\n",
       "      <th>&lt;lambda&gt;</th>\n",
       "      <th>cb</th>\n",
       "      <th>exp</th>\n",
       "      <th>sqrt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>83</td>\n",
       "      <td>75</td>\n",
       "      <td>5.052394e+31</td>\n",
       "      <td>8.544004</td>\n",
       "      <td>23</td>\n",
       "      <td>25</td>\n",
       "      <td>4.424134e+05</td>\n",
       "      <td>3.605551</td>\n",
       "      <td>94</td>\n",
       "      <td>75</td>\n",
       "      <td>3.025077e+36</td>\n",
       "      <td>9.165151</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>83</td>\n",
       "      <td>75</td>\n",
       "      <td>5.052394e+31</td>\n",
       "      <td>8.544004</td>\n",
       "      <td>61</td>\n",
       "      <td>75</td>\n",
       "      <td>1.409349e+22</td>\n",
       "      <td>7.141428</td>\n",
       "      <td>94</td>\n",
       "      <td>75</td>\n",
       "      <td>3.025077e+36</td>\n",
       "      <td>9.165151</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>103</td>\n",
       "      <td>75</td>\n",
       "      <td>2.451246e+40</td>\n",
       "      <td>9.643651</td>\n",
       "      <td>85</td>\n",
       "      <td>75</td>\n",
       "      <td>3.733242e+32</td>\n",
       "      <td>8.660254</td>\n",
       "      <td>27</td>\n",
       "      <td>25</td>\n",
       "      <td>2.415495e+07</td>\n",
       "      <td>4.123106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>26</td>\n",
       "      <td>25</td>\n",
       "      <td>8.886111e+06</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>60</td>\n",
       "      <td>25</td>\n",
       "      <td>5.184706e+21</td>\n",
       "      <td>7.071068</td>\n",
       "      <td>107</td>\n",
       "      <td>75</td>\n",
       "      <td>1.338335e+42</td>\n",
       "      <td>9.848858</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>15</td>\n",
       "      <td>25</td>\n",
       "      <td>1.484132e+02</td>\n",
       "      <td>2.236068</td>\n",
       "      <td>84</td>\n",
       "      <td>75</td>\n",
       "      <td>1.373383e+32</td>\n",
       "      <td>8.602325</td>\n",
       "      <td>70</td>\n",
       "      <td>75</td>\n",
       "      <td>1.142007e+26</td>\n",
       "      <td>7.745967</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>84</td>\n",
       "      <td>75</td>\n",
       "      <td>1.373383e+32</td>\n",
       "      <td>8.602325</td>\n",
       "      <td>55</td>\n",
       "      <td>25</td>\n",
       "      <td>3.493427e+19</td>\n",
       "      <td>6.708204</td>\n",
       "      <td>17</td>\n",
       "      <td>25</td>\n",
       "      <td>1.096633e+03</td>\n",
       "      <td>2.645751</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>60</td>\n",
       "      <td>25</td>\n",
       "      <td>5.184706e+21</td>\n",
       "      <td>7.071068</td>\n",
       "      <td>85</td>\n",
       "      <td>75</td>\n",
       "      <td>3.733242e+32</td>\n",
       "      <td>8.660254</td>\n",
       "      <td>19</td>\n",
       "      <td>25</td>\n",
       "      <td>8.103084e+03</td>\n",
       "      <td>3.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>71</td>\n",
       "      <td>75</td>\n",
       "      <td>3.104298e+26</td>\n",
       "      <td>7.810250</td>\n",
       "      <td>59</td>\n",
       "      <td>25</td>\n",
       "      <td>1.907347e+21</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>24</td>\n",
       "      <td>25</td>\n",
       "      <td>1.202604e+06</td>\n",
       "      <td>3.741657</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>48</td>\n",
       "      <td>25</td>\n",
       "      <td>3.185593e+16</td>\n",
       "      <td>6.164414</td>\n",
       "      <td>102</td>\n",
       "      <td>75</td>\n",
       "      <td>9.017628e+39</td>\n",
       "      <td>9.591663</td>\n",
       "      <td>38</td>\n",
       "      <td>25</td>\n",
       "      <td>1.446257e+12</td>\n",
       "      <td>5.291503</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>54</td>\n",
       "      <td>25</td>\n",
       "      <td>1.285160e+19</td>\n",
       "      <td>6.633250</td>\n",
       "      <td>95</td>\n",
       "      <td>75</td>\n",
       "      <td>8.223013e+36</td>\n",
       "      <td>9.219544</td>\n",
       "      <td>94</td>\n",
       "      <td>75</td>\n",
       "      <td>3.025077e+36</td>\n",
       "      <td>9.165151</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Python                                 Math                              \\\n",
       "  <lambda>  cb           exp      sqrt <lambda>  cb           exp      sqrt   \n",
       "0       83  75  5.052394e+31  8.544004       23  25  4.424134e+05  3.605551   \n",
       "1       83  75  5.052394e+31  8.544004       61  75  1.409349e+22  7.141428   \n",
       "2      103  75  2.451246e+40  9.643651       85  75  3.733242e+32  8.660254   \n",
       "3       26  25  8.886111e+06  4.000000       60  25  5.184706e+21  7.071068   \n",
       "4       15  25  1.484132e+02  2.236068       84  75  1.373383e+32  8.602325   \n",
       "5       84  75  1.373383e+32  8.602325       55  25  3.493427e+19  6.708204   \n",
       "6       60  25  5.184706e+21  7.071068       85  75  3.733242e+32  8.660254   \n",
       "7       71  75  3.104298e+26  7.810250       59  25  1.907347e+21  7.000000   \n",
       "8       48  25  3.185593e+16  6.164414      102  75  9.017628e+39  9.591663   \n",
       "9       54  25  1.285160e+19  6.633250       95  75  8.223013e+36  9.219544   \n",
       "\n",
       "   English                              \n",
       "  <lambda>  cb           exp      sqrt  \n",
       "0       94  75  3.025077e+36  9.165151  \n",
       "1       94  75  3.025077e+36  9.165151  \n",
       "2       27  25  2.415495e+07  4.123106  \n",
       "3      107  75  1.338335e+42  9.848858  \n",
       "4       70  75  1.142007e+26  7.745967  \n",
       "5       17  25  1.096633e+03  2.645751  \n",
       "6       19  25  8.103084e+03  3.000000  \n",
       "7       24  25  1.202604e+06  3.741657  \n",
       "8       38  25  1.446257e+12  5.291503  \n",
       "9       94  75  3.025077e+36  9.165151  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MultiIndex([( 'Python', '<lambda>'),\n",
      "            ( 'Python',       'cb'),\n",
      "            ( 'Python',      'exp'),\n",
      "            ( 'Python',     'sqrt'),\n",
      "            (   'Math', '<lambda>'),\n",
      "            (   'Math',       'cb'),\n",
      "            (   'Math',      'exp'),\n",
      "            (   'Math',     'sqrt'),\n",
      "            ('English', '<lambda>'),\n",
      "            ('English',       'cb'),\n",
      "            ('English',      'exp'),\n",
      "            ('English',     'sqrt')],\n",
      "           )\n"
     ]
    }
   ],
   "source": [
    "def cb(x):\n",
    "    return 25 if x <= 50 else 75\n",
    "\n",
    "#多个列同时应用多个操作。会产生 列数*操作数 个列，这些列通过多级索引组织\n",
    "res = df.transform([lambda x:x+10, cb, np.exp, np. sqrt])\n",
    "display(res)\n",
    "print(res.columns)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c971d783-da16-4bf7-9890-d2570f256318",
   "metadata": {},
   "source": [
    "### 重排随机抽样哑变量"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bef842a3-d635-466b-a378-cd1c1ef260fb",
   "metadata": {},
   "source": [
    "**重排**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "d3f84cbf-4818-4d7f-ba03-12eeb24b80f3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>75</td>\n",
       "      <td>94</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>58</td>\n",
       "      <td>83</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>29</td>\n",
       "      <td>89</td>\n",
       "      <td>82</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>90</td>\n",
       "      <td>48</td>\n",
       "      <td>48</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>79</td>\n",
       "      <td>71</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>38</td>\n",
       "      <td>91</td>\n",
       "      <td>96</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>62</td>\n",
       "      <td>0</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>33</td>\n",
       "      <td>55</td>\n",
       "      <td>78</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>21</td>\n",
       "      <td>57</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>35</td>\n",
       "      <td>39</td>\n",
       "      <td>69</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A      75    94        9\n",
       "B      58    83       70\n",
       "C      29    89       82\n",
       "D      90    48       48\n",
       "E      79    71       90\n",
       "F      38    91       96\n",
       "G      62     0       20\n",
       "H      33    55       78\n",
       "I      21    57       40\n",
       "J      35    39       69"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(10, 3)),\n",
    "                  index=list('ABCDEFGHIJ'),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "id": "2f09207d-9dd4-400c-8964-7e65d6dbf267",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>75</td>\n",
       "      <td>94</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>38</td>\n",
       "      <td>91</td>\n",
       "      <td>96</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>79</td>\n",
       "      <td>71</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>58</td>\n",
       "      <td>83</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>33</td>\n",
       "      <td>55</td>\n",
       "      <td>78</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>90</td>\n",
       "      <td>48</td>\n",
       "      <td>48</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>35</td>\n",
       "      <td>39</td>\n",
       "      <td>69</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>62</td>\n",
       "      <td>0</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>29</td>\n",
       "      <td>89</td>\n",
       "      <td>82</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>21</td>\n",
       "      <td>57</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A      75    94        9\n",
       "F      38    91       96\n",
       "E      79    71       90\n",
       "B      58    83       70\n",
       "H      33    55       78\n",
       "D      90    48       48\n",
       "J      35    39       69\n",
       "G      62     0       20\n",
       "C      29    89       82\n",
       "I      21    57       40"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 随机排列 0-9 这 10 个数字\n",
    "idx = np.random.permutation(10)\n",
    "\n",
    "# 重排\n",
    "df.take(idx)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1b2e9ec4-088e-4c65-b7c1-f6da3216abeb",
   "metadata": {},
   "source": [
    "**随机抽样**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "89fa7b5d-6b81-4f84-bb49-488db69c8ce3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 9, 3, 3, 1])"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>75</td>\n",
       "      <td>94</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>35</td>\n",
       "      <td>39</td>\n",
       "      <td>69</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>90</td>\n",
       "      <td>48</td>\n",
       "      <td>48</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>90</td>\n",
       "      <td>48</td>\n",
       "      <td>48</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>58</td>\n",
       "      <td>83</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A      75    94        9\n",
       "J      35    39       69\n",
       "D      90    48       48\n",
       "D      90    48       48\n",
       "B      58    83       70"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 得到 5 个随机数，范围是 0-9\n",
    "idx = np.random.randint(0, 10, size=5)\n",
    "display(idx)\n",
    "\n",
    "# 根据生成的随机数进行抽样。结果可能重复\n",
    "df.take(idx)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0916aa06-0143-4192-b3c3-a3d8d3a0c28c",
   "metadata": {},
   "source": [
    "**哑变量**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "id": "fb6f5df5-f43d-40a5-8aaa-3750a7d9b51c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>c</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  key\n",
       "0   b\n",
       "1   b\n",
       "2   a\n",
       "3   c\n",
       "4   a\n",
       "5   b"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\n",
    "    'key': ['b', 'b', 'a', 'c', 'a', 'b']\n",
    "})\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "id": "7aed4094-d741-4ddd-835c-8d51d0a63d03",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>a</th>\n",
       "      <th>b</th>\n",
       "      <th>c</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       a      b      c\n",
       "0  False   True  False\n",
       "1  False   True  False\n",
       "2   True  False  False\n",
       "3  False  False   True\n",
       "4   True  False  False\n",
       "5  False   True  False"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.get_dummies(df, prefix='', prefix_sep='')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "25ce2595-351c-41bb-992f-71d1d3debadb",
   "metadata": {},
   "source": [
    "**独热编码**：给定一串编码，其中只有一个为真或1，其余都为假或0\n",
    "- 表示 b：(0, 1, 0)\n",
    "- 表示 a：(1, 0, 0)\n",
    "- 表示 a：(0, 0, 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ad9d035-76ea-4840-b805-ec779416c2cd",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 练习 2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "df92d85b-d847-444b-999f-ef04c68274a4",
   "metadata": {},
   "source": [
    "### No.1\n",
    "\n",
    "体测成绩.xlsx 中的【男生】工作表\n",
    "\n",
    "1. 数据清理\n",
    "2. 【男1000米跑】字段类型转换"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "id": "e611e045-1d96-40c7-b253-187911f0c62f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Kim大学体能极限是1km3分34秒！\n"
     ]
    }
   ],
   "source": [
    "s = '我大学体能极限是1km3分34秒！'\n",
    "print(s.replace('我', 'Kim'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "id": "594d5593-be5c-4ec3-9dea-9429ad2c367a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4.12\n"
     ]
    }
   ],
   "source": [
    "s = \"4'12\"\n",
    "n = s.replace(\"\\'\", '.')\n",
    "print(float(n))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "id": "60c0c27c-8d0b-4530-b517-1ff17b48af15",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n",
      "False\n"
     ]
    }
   ],
   "source": [
    "#查看变量数据类型\n",
    "var = '5.12'\n",
    "print(isinstance(var, str))\n",
    "\n",
    "var = 4.1235\n",
    "print(isinstance(var, str))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3e5cfb31-c6f1-41d0-9fe9-ae9b286a00d7",
   "metadata": {},
   "source": [
    "**处理数据**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "id": "fad09ef5-8cd5-4b25-8e51-b38541ed653f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>男1000米跑</th>\n",
       "      <th>男50米跑</th>\n",
       "      <th>男跳远</th>\n",
       "      <th>男体前屈</th>\n",
       "      <th>男引体</th>\n",
       "      <th>男肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*森18</td>\n",
       "      <td>5'19</td>\n",
       "      <td>9.55</td>\n",
       "      <td>210.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>7042.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>男</td>\n",
       "      <td>苏*飞27</td>\n",
       "      <td>4'12</td>\n",
       "      <td>8.60</td>\n",
       "      <td>215.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>3458.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>男</td>\n",
       "      <td>寻*潇13</td>\n",
       "      <td>4'17</td>\n",
       "      <td>8.16</td>\n",
       "      <td>215.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>4336.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*冉36</td>\n",
       "      <td>4'19</td>\n",
       "      <td>8.96</td>\n",
       "      <td>205.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4539.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>男</td>\n",
       "      <td>王*磊40</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8.30</td>\n",
       "      <td>230.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>6059.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名 男1000米跑  男50米跑    男跳远  男体前屈   男引体    男肺活量\n",
       "0  男  郭*森18    5'19   9.55  210.0  15.0   6.0  7042.0\n",
       "1  男  苏*飞27    4'12   8.60  215.0  15.0  11.0  3458.0\n",
       "2  男  寻*潇13    4'17   8.16  215.0  14.0   4.0  4336.0\n",
       "3  男  郭*冉36    4'19   8.96  205.0  14.0   0.0  4539.0\n",
       "4  男  王*磊40     NaN   8.30  230.0  14.0   9.0  6059.0"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_boys = pd.read_excel('体测成绩.xlsx', sheet_name=0, header=0)\n",
    "df_boys.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "id": "e68746a7-356e-47d2-b95e-739f0cef021d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>男1000米跑</th>\n",
       "      <th>男50米跑</th>\n",
       "      <th>男跳远</th>\n",
       "      <th>男体前屈</th>\n",
       "      <th>男引体</th>\n",
       "      <th>男肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*森18</td>\n",
       "      <td>5'19</td>\n",
       "      <td>9.55</td>\n",
       "      <td>210.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>7042.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>男</td>\n",
       "      <td>苏*飞27</td>\n",
       "      <td>4'12</td>\n",
       "      <td>8.60</td>\n",
       "      <td>215.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>3458.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>男</td>\n",
       "      <td>寻*潇13</td>\n",
       "      <td>4'17</td>\n",
       "      <td>8.16</td>\n",
       "      <td>215.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>4336.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*冉36</td>\n",
       "      <td>4'19</td>\n",
       "      <td>8.96</td>\n",
       "      <td>205.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4539.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>男</td>\n",
       "      <td>王*磊40</td>\n",
       "      <td>0</td>\n",
       "      <td>8.30</td>\n",
       "      <td>230.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>6059.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名 男1000米跑  男50米跑    男跳远  男体前屈   男引体    男肺活量\n",
       "0  男  郭*森18    5'19   9.55  210.0  15.0   6.0  7042.0\n",
       "1  男  苏*飞27    4'12   8.60  215.0  15.0  11.0  3458.0\n",
       "2  男  寻*潇13    4'17   8.16  215.0  14.0   4.0  4336.0\n",
       "3  男  郭*冉36    4'19   8.96  205.0  14.0   0.0  4539.0\n",
       "4  男  王*磊40       0   8.30  230.0  14.0   9.0  6059.0"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#全局空数据填写为 0\n",
    "df_boys = df_boys.fillna(0)\n",
    "df_boys.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "id": "a774ff20-79c7-4bb4-9a46-6d4aa40a0a45",
   "metadata": {},
   "outputs": [],
   "source": [
    "def convert_time_to_float(s):\n",
    "    if isinstance(s, str):\n",
    "        n = s.replace(\"\\'\", '.')\n",
    "        return float(n)\n",
    "    else:\n",
    "        return s\n",
    "\n",
    "df_boys['男1000米跑'] = df_boys['男1000米跑'].transform(convert_time_to_float)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "id": "218f66fd-cd9f-4953-825e-cbf7f1fcac3a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>男1000米跑</th>\n",
       "      <th>男50米跑</th>\n",
       "      <th>男跳远</th>\n",
       "      <th>男体前屈</th>\n",
       "      <th>男引体</th>\n",
       "      <th>男肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*森18</td>\n",
       "      <td>5.19</td>\n",
       "      <td>9.55</td>\n",
       "      <td>210.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>7042.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>男</td>\n",
       "      <td>苏*飞27</td>\n",
       "      <td>4.12</td>\n",
       "      <td>8.60</td>\n",
       "      <td>215.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>3458.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>男</td>\n",
       "      <td>寻*潇13</td>\n",
       "      <td>4.17</td>\n",
       "      <td>8.16</td>\n",
       "      <td>215.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>4336.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*冉36</td>\n",
       "      <td>4.19</td>\n",
       "      <td>8.96</td>\n",
       "      <td>205.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4539.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>男</td>\n",
       "      <td>王*磊40</td>\n",
       "      <td>0.00</td>\n",
       "      <td>8.30</td>\n",
       "      <td>230.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>6059.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名  男1000米跑  男50米跑    男跳远  男体前屈   男引体    男肺活量\n",
       "0  男  郭*森18     5.19   9.55  210.0  15.0   6.0  7042.0\n",
       "1  男  苏*飞27     4.12   8.60  215.0  15.0  11.0  3458.0\n",
       "2  男  寻*潇13     4.17   8.16  215.0  14.0   4.0  4336.0\n",
       "3  男  郭*冉36     4.19   8.96  205.0  14.0   0.0  4539.0\n",
       "4  男  王*磊40     0.00   8.30  230.0  14.0   9.0  6059.0"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_boys.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "id": "9a792e14-f009-4114-a160-fc0be1e515be",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_boys.to_excel('体测成绩_男生_处理.xlsx', header=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "45206036-cc38-4fa0-99dd-2a03c040bc01",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>男1000米跑</th>\n",
       "      <th>男50米跑</th>\n",
       "      <th>男跳远</th>\n",
       "      <th>男体前屈</th>\n",
       "      <th>男引体</th>\n",
       "      <th>男肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*森18</td>\n",
       "      <td>5.19</td>\n",
       "      <td>9.55</td>\n",
       "      <td>210</td>\n",
       "      <td>15</td>\n",
       "      <td>6</td>\n",
       "      <td>7042</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>男</td>\n",
       "      <td>苏*飞27</td>\n",
       "      <td>4.12</td>\n",
       "      <td>8.60</td>\n",
       "      <td>215</td>\n",
       "      <td>15</td>\n",
       "      <td>11</td>\n",
       "      <td>3458</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>男</td>\n",
       "      <td>寻*潇13</td>\n",
       "      <td>4.17</td>\n",
       "      <td>8.16</td>\n",
       "      <td>215</td>\n",
       "      <td>14</td>\n",
       "      <td>4</td>\n",
       "      <td>4336</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*冉36</td>\n",
       "      <td>4.19</td>\n",
       "      <td>8.96</td>\n",
       "      <td>205</td>\n",
       "      <td>14</td>\n",
       "      <td>0</td>\n",
       "      <td>4539</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>男</td>\n",
       "      <td>王*磊40</td>\n",
       "      <td>0.00</td>\n",
       "      <td>8.30</td>\n",
       "      <td>230</td>\n",
       "      <td>14</td>\n",
       "      <td>9</td>\n",
       "      <td>6059</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名  男1000米跑  男50米跑  男跳远  男体前屈  男引体  男肺活量\n",
       "0  男  郭*森18     5.19   9.55  210    15    6  7042\n",
       "1  男  苏*飞27     4.12   8.60  215    15   11  3458\n",
       "2  男  寻*潇13     4.17   8.16  215    14    4  4336\n",
       "3  男  郭*冉36     4.19   8.96  205    14    0  4539\n",
       "4  男  王*磊40     0.00   8.30  230    14    9  6059"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.read_excel('体测成绩_男生_处理.xlsx', index_col=0).head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e1cb0eb2-3032-4651-800e-42a65145cb28",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "### No.2\n",
    "\n",
    "体测成绩.xlsx 中的【女生】工作表\n",
    "\n",
    "1. 数据清理\n",
    "2. 【女800米跑】字段类型转换"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "442b1b91-673b-4035-b24a-c0f214d6e551",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>女800米跑</th>\n",
       "      <th>女50米跑</th>\n",
       "      <th>女跳远</th>\n",
       "      <th>女体前屈</th>\n",
       "      <th>女仰卧</th>\n",
       "      <th>女肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>女</td>\n",
       "      <td>李*帆6</td>\n",
       "      <td>4</td>\n",
       "      <td>9.92</td>\n",
       "      <td>172</td>\n",
       "      <td>23</td>\n",
       "      <td>40</td>\n",
       "      <td>2348</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>女</td>\n",
       "      <td>吕*璇40</td>\n",
       "      <td>3'55</td>\n",
       "      <td>10.94</td>\n",
       "      <td>160</td>\n",
       "      <td>14</td>\n",
       "      <td>39</td>\n",
       "      <td>2588</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>女</td>\n",
       "      <td>任*哲30</td>\n",
       "      <td>3'29</td>\n",
       "      <td>8.79</td>\n",
       "      <td>150</td>\n",
       "      <td>17</td>\n",
       "      <td>36</td>\n",
       "      <td>3043</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>女</td>\n",
       "      <td>李*琦13</td>\n",
       "      <td>3'36</td>\n",
       "      <td>10.16</td>\n",
       "      <td>167</td>\n",
       "      <td>13</td>\n",
       "      <td>41</td>\n",
       "      <td>3276</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>女</td>\n",
       "      <td>高*润32</td>\n",
       "      <td>3'49</td>\n",
       "      <td>9.99</td>\n",
       "      <td>160</td>\n",
       "      <td>10</td>\n",
       "      <td>40</td>\n",
       "      <td>2410</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名 女800米跑  女50米跑  女跳远  女体前屈  女仰卧  女肺活量\n",
       "0  女   李*帆6      4   9.92  172    23   40  2348\n",
       "1  女  吕*璇40   3'55  10.94  160    14   39  2588\n",
       "2  女  任*哲30   3'29   8.79  150    17   36  3043\n",
       "3  女  李*琦13   3'36  10.16  167    13   41  3276\n",
       "4  女  高*润32   3'49   9.99  160    10   40  2410"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_girls = pd.read_excel('体测成绩.xlsx', sheet_name=1, header=0)\n",
    "df_girls.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "id": "c19083ee-0c1e-48ee-8fe0-8d170e9753ce",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>女800米跑</th>\n",
       "      <th>女50米跑</th>\n",
       "      <th>女跳远</th>\n",
       "      <th>女体前屈</th>\n",
       "      <th>女仰卧</th>\n",
       "      <th>女肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>女</td>\n",
       "      <td>李*帆6</td>\n",
       "      <td>4.00</td>\n",
       "      <td>9.92</td>\n",
       "      <td>172</td>\n",
       "      <td>23</td>\n",
       "      <td>40</td>\n",
       "      <td>2348</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>女</td>\n",
       "      <td>吕*璇40</td>\n",
       "      <td>3.55</td>\n",
       "      <td>10.94</td>\n",
       "      <td>160</td>\n",
       "      <td>14</td>\n",
       "      <td>39</td>\n",
       "      <td>2588</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>女</td>\n",
       "      <td>任*哲30</td>\n",
       "      <td>3.29</td>\n",
       "      <td>8.79</td>\n",
       "      <td>150</td>\n",
       "      <td>17</td>\n",
       "      <td>36</td>\n",
       "      <td>3043</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>女</td>\n",
       "      <td>李*琦13</td>\n",
       "      <td>3.36</td>\n",
       "      <td>10.16</td>\n",
       "      <td>167</td>\n",
       "      <td>13</td>\n",
       "      <td>41</td>\n",
       "      <td>3276</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>女</td>\n",
       "      <td>高*润32</td>\n",
       "      <td>3.49</td>\n",
       "      <td>9.99</td>\n",
       "      <td>160</td>\n",
       "      <td>10</td>\n",
       "      <td>40</td>\n",
       "      <td>2410</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名  女800米跑  女50米跑  女跳远  女体前屈  女仰卧  女肺活量\n",
       "0  女   李*帆6    4.00   9.92  172    23   40  2348\n",
       "1  女  吕*璇40    3.55  10.94  160    14   39  2588\n",
       "2  女  任*哲30    3.29   8.79  150    17   36  3043\n",
       "3  女  李*琦13    3.36  10.16  167    13   41  3276\n",
       "4  女  高*润32    3.49   9.99  160    10   40  2410"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#全局空数据填写为 0\n",
    "df_girls = df_girls.fillna(0)\n",
    "\n",
    "def convert_time_to_float(s):\n",
    "    if isinstance(s, str):\n",
    "        n = s.replace(\"\\'\", '.')\n",
    "        return float(n)\n",
    "    else:\n",
    "        return s\n",
    "\n",
    "df_girls['女800米跑'] = df_girls['女800米跑'].transform(convert_time_to_float)\n",
    "df_girls.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "id": "fa82acc8-663e-491c-8b5a-e70ac98edc6f",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_girls.to_excel('体测成绩_女生_处理.xlsx', header=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "id": "dd821652-8977-41a3-90d8-078200412652",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>女800米跑</th>\n",
       "      <th>女50米跑</th>\n",
       "      <th>女跳远</th>\n",
       "      <th>女体前屈</th>\n",
       "      <th>女仰卧</th>\n",
       "      <th>女肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>女</td>\n",
       "      <td>李*帆6</td>\n",
       "      <td>4.00</td>\n",
       "      <td>9.92</td>\n",
       "      <td>172</td>\n",
       "      <td>23</td>\n",
       "      <td>40</td>\n",
       "      <td>2348</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>女</td>\n",
       "      <td>吕*璇40</td>\n",
       "      <td>3.55</td>\n",
       "      <td>10.94</td>\n",
       "      <td>160</td>\n",
       "      <td>14</td>\n",
       "      <td>39</td>\n",
       "      <td>2588</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>女</td>\n",
       "      <td>任*哲30</td>\n",
       "      <td>3.29</td>\n",
       "      <td>8.79</td>\n",
       "      <td>150</td>\n",
       "      <td>17</td>\n",
       "      <td>36</td>\n",
       "      <td>3043</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>女</td>\n",
       "      <td>李*琦13</td>\n",
       "      <td>3.36</td>\n",
       "      <td>10.16</td>\n",
       "      <td>167</td>\n",
       "      <td>13</td>\n",
       "      <td>41</td>\n",
       "      <td>3276</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>女</td>\n",
       "      <td>高*润32</td>\n",
       "      <td>3.49</td>\n",
       "      <td>9.99</td>\n",
       "      <td>160</td>\n",
       "      <td>10</td>\n",
       "      <td>40</td>\n",
       "      <td>2410</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名  女800米跑  女50米跑  女跳远  女体前屈  女仰卧  女肺活量\n",
       "0  女   李*帆6    4.00   9.92  172    23   40  2348\n",
       "1  女  吕*璇40    3.55  10.94  160    14   39  2588\n",
       "2  女  任*哲30    3.29   8.79  150    17   36  3043\n",
       "3  女  李*琦13    3.36  10.16  167    13   41  3276\n",
       "4  女  高*润32    3.49   9.99  160    10   40  2410"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.read_excel('体测成绩_女生_处理.xlsx', index_col=0).head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8bc46fc8-f49c-43b4-a527-f9464c8cd155",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "### No.3\n",
    "\n",
    "体测成绩评分表.xlsx\n",
    "\n",
    "1. 数据清理\n",
    "2. 数据转换\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "id": "4e5dd933-9950-4f6b-bcc1-551e51ca5c51",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">男肺活量</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女肺活量</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男50米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女50米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男体前屈</th>\n",
       "      <th>...</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女跳远</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男引体</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女仰卧</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男1000米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女800米跑</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>...</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4540</td>\n",
       "      <td>100</td>\n",
       "      <td>3150</td>\n",
       "      <td>100</td>\n",
       "      <td>7.1</td>\n",
       "      <td>100</td>\n",
       "      <td>7.8</td>\n",
       "      <td>100</td>\n",
       "      <td>23.6</td>\n",
       "      <td>100</td>\n",
       "      <td>...</td>\n",
       "      <td>204</td>\n",
       "      <td>100</td>\n",
       "      <td>16.0</td>\n",
       "      <td>100</td>\n",
       "      <td>53</td>\n",
       "      <td>100</td>\n",
       "      <td>3'30\"</td>\n",
       "      <td>100</td>\n",
       "      <td>3'24\"</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4420</td>\n",
       "      <td>95</td>\n",
       "      <td>3100</td>\n",
       "      <td>95</td>\n",
       "      <td>7.2</td>\n",
       "      <td>95</td>\n",
       "      <td>7.9</td>\n",
       "      <td>95</td>\n",
       "      <td>21.5</td>\n",
       "      <td>95</td>\n",
       "      <td>...</td>\n",
       "      <td>198</td>\n",
       "      <td>95</td>\n",
       "      <td>15.0</td>\n",
       "      <td>95</td>\n",
       "      <td>51</td>\n",
       "      <td>95</td>\n",
       "      <td>3'35\"</td>\n",
       "      <td>95</td>\n",
       "      <td>3'30\"</td>\n",
       "      <td>95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4300</td>\n",
       "      <td>90</td>\n",
       "      <td>3050</td>\n",
       "      <td>90</td>\n",
       "      <td>7.3</td>\n",
       "      <td>90</td>\n",
       "      <td>8.0</td>\n",
       "      <td>90</td>\n",
       "      <td>19.4</td>\n",
       "      <td>90</td>\n",
       "      <td>...</td>\n",
       "      <td>192</td>\n",
       "      <td>90</td>\n",
       "      <td>14.0</td>\n",
       "      <td>90</td>\n",
       "      <td>49</td>\n",
       "      <td>90</td>\n",
       "      <td>3'40\"</td>\n",
       "      <td>90</td>\n",
       "      <td>3'36\"</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4050</td>\n",
       "      <td>85</td>\n",
       "      <td>2900</td>\n",
       "      <td>85</td>\n",
       "      <td>7.4</td>\n",
       "      <td>85</td>\n",
       "      <td>8.3</td>\n",
       "      <td>85</td>\n",
       "      <td>17.2</td>\n",
       "      <td>85</td>\n",
       "      <td>...</td>\n",
       "      <td>185</td>\n",
       "      <td>85</td>\n",
       "      <td>13.0</td>\n",
       "      <td>85</td>\n",
       "      <td>46</td>\n",
       "      <td>85</td>\n",
       "      <td>3'47\"</td>\n",
       "      <td>85</td>\n",
       "      <td>3'43\"</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3800</td>\n",
       "      <td>80</td>\n",
       "      <td>2750</td>\n",
       "      <td>80</td>\n",
       "      <td>7.5</td>\n",
       "      <td>80</td>\n",
       "      <td>8.6</td>\n",
       "      <td>80</td>\n",
       "      <td>15.0</td>\n",
       "      <td>80</td>\n",
       "      <td>...</td>\n",
       "      <td>178</td>\n",
       "      <td>80</td>\n",
       "      <td>12.0</td>\n",
       "      <td>80</td>\n",
       "      <td>43</td>\n",
       "      <td>80</td>\n",
       "      <td>3'55\"</td>\n",
       "      <td>80</td>\n",
       "      <td>3'50\"</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   男肺活量       女肺活量      男50米跑      女50米跑       男体前屈       ...  女跳远        男引体  \\\n",
       "     成绩   分数    成绩   分数    成绩   分数    成绩   分数    成绩   分数  ...   成绩   分数    成绩   \n",
       "0  4540  100  3150  100   7.1  100   7.8  100  23.6  100  ...  204  100  16.0   \n",
       "1  4420   95  3100   95   7.2   95   7.9   95  21.5   95  ...  198   95  15.0   \n",
       "2  4300   90  3050   90   7.3   90   8.0   90  19.4   90  ...  192   90  14.0   \n",
       "3  4050   85  2900   85   7.4   85   8.3   85  17.2   85  ...  185   85  13.0   \n",
       "4  3800   80  2750   80   7.5   80   8.6   80  15.0   80  ...  178   80  12.0   \n",
       "\n",
       "       女仰卧      男1000米跑      女800米跑       \n",
       "    分数  成绩   分数      成绩   分数     成绩   分数  \n",
       "0  100  53  100   3'30\"  100  3'24\"  100  \n",
       "1   95  51   95   3'35\"   95  3'30\"   95  \n",
       "2   90  49   90   3'40\"   90  3'36\"   90  \n",
       "3   85  46   85   3'47\"   85  3'43\"   85  \n",
       "4   80  43   80   3'55\"   80  3'50\"   80  \n",
       "\n",
       "[5 rows x 24 columns]"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# header：指定第一行和第二行用作列索引\n",
    "df_pfb = pd.read_excel('体测成绩评分表.xlsx', sheet_name=0, header=[0, 1])\n",
    "\n",
    "df_pfb.fillna(0)\n",
    "\n",
    "df_pfb.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "id": "65963846-2ebd-417d-b0ef-b1943b02f71c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">男肺活量</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女肺活量</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男50米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女50米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男体前屈</th>\n",
       "      <th>...</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女跳远</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男引体</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女仰卧</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男1000米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女800米跑</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>...</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4540</td>\n",
       "      <td>100</td>\n",
       "      <td>3150</td>\n",
       "      <td>100</td>\n",
       "      <td>7.1</td>\n",
       "      <td>100</td>\n",
       "      <td>7.8</td>\n",
       "      <td>100</td>\n",
       "      <td>23.6</td>\n",
       "      <td>100</td>\n",
       "      <td>...</td>\n",
       "      <td>204</td>\n",
       "      <td>100</td>\n",
       "      <td>16.0</td>\n",
       "      <td>100</td>\n",
       "      <td>53</td>\n",
       "      <td>100</td>\n",
       "      <td>3.30</td>\n",
       "      <td>100</td>\n",
       "      <td>3.24</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4420</td>\n",
       "      <td>95</td>\n",
       "      <td>3100</td>\n",
       "      <td>95</td>\n",
       "      <td>7.2</td>\n",
       "      <td>95</td>\n",
       "      <td>7.9</td>\n",
       "      <td>95</td>\n",
       "      <td>21.5</td>\n",
       "      <td>95</td>\n",
       "      <td>...</td>\n",
       "      <td>198</td>\n",
       "      <td>95</td>\n",
       "      <td>15.0</td>\n",
       "      <td>95</td>\n",
       "      <td>51</td>\n",
       "      <td>95</td>\n",
       "      <td>3.35</td>\n",
       "      <td>95</td>\n",
       "      <td>3.30</td>\n",
       "      <td>95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4300</td>\n",
       "      <td>90</td>\n",
       "      <td>3050</td>\n",
       "      <td>90</td>\n",
       "      <td>7.3</td>\n",
       "      <td>90</td>\n",
       "      <td>8.0</td>\n",
       "      <td>90</td>\n",
       "      <td>19.4</td>\n",
       "      <td>90</td>\n",
       "      <td>...</td>\n",
       "      <td>192</td>\n",
       "      <td>90</td>\n",
       "      <td>14.0</td>\n",
       "      <td>90</td>\n",
       "      <td>49</td>\n",
       "      <td>90</td>\n",
       "      <td>3.40</td>\n",
       "      <td>90</td>\n",
       "      <td>3.36</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4050</td>\n",
       "      <td>85</td>\n",
       "      <td>2900</td>\n",
       "      <td>85</td>\n",
       "      <td>7.4</td>\n",
       "      <td>85</td>\n",
       "      <td>8.3</td>\n",
       "      <td>85</td>\n",
       "      <td>17.2</td>\n",
       "      <td>85</td>\n",
       "      <td>...</td>\n",
       "      <td>185</td>\n",
       "      <td>85</td>\n",
       "      <td>13.0</td>\n",
       "      <td>85</td>\n",
       "      <td>46</td>\n",
       "      <td>85</td>\n",
       "      <td>3.47</td>\n",
       "      <td>85</td>\n",
       "      <td>3.43</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3800</td>\n",
       "      <td>80</td>\n",
       "      <td>2750</td>\n",
       "      <td>80</td>\n",
       "      <td>7.5</td>\n",
       "      <td>80</td>\n",
       "      <td>8.6</td>\n",
       "      <td>80</td>\n",
       "      <td>15.0</td>\n",
       "      <td>80</td>\n",
       "      <td>...</td>\n",
       "      <td>178</td>\n",
       "      <td>80</td>\n",
       "      <td>12.0</td>\n",
       "      <td>80</td>\n",
       "      <td>43</td>\n",
       "      <td>80</td>\n",
       "      <td>3.55</td>\n",
       "      <td>80</td>\n",
       "      <td>3.50</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   男肺活量       女肺活量      男50米跑      女50米跑       男体前屈       ...  女跳远        男引体  \\\n",
       "     成绩   分数    成绩   分数    成绩   分数    成绩   分数    成绩   分数  ...   成绩   分数    成绩   \n",
       "0  4540  100  3150  100   7.1  100   7.8  100  23.6  100  ...  204  100  16.0   \n",
       "1  4420   95  3100   95   7.2   95   7.9   95  21.5   95  ...  198   95  15.0   \n",
       "2  4300   90  3050   90   7.3   90   8.0   90  19.4   90  ...  192   90  14.0   \n",
       "3  4050   85  2900   85   7.4   85   8.3   85  17.2   85  ...  185   85  13.0   \n",
       "4  3800   80  2750   80   7.5   80   8.6   80  15.0   80  ...  178   80  12.0   \n",
       "\n",
       "       女仰卧      男1000米跑      女800米跑       \n",
       "    分数  成绩   分数      成绩   分数     成绩   分数  \n",
       "0  100  53  100    3.30  100   3.24  100  \n",
       "1   95  51   95    3.35   95   3.30   95  \n",
       "2   90  49   90    3.40   90   3.36   90  \n",
       "3   85  46   85    3.47   85   3.43   85  \n",
       "4   80  43   80    3.55   80   3.50   80  \n",
       "\n",
       "[5 rows x 24 columns]"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def convert(x):\n",
    "    if isinstance(x, str):\n",
    "        return x.replace(\"\\'\", '.').replace('\\\"', '')\n",
    "    else:\n",
    "        return x\n",
    "\n",
    "#男1000米跑-成绩\n",
    "df_pfb.iloc[:, -4] = df_pfb.iloc[:, -4].apply(convert)\n",
    "\n",
    "#女800米跑-成绩\n",
    "df_pfb.iloc[:, -2] = df_pfb.iloc[:, -2].apply(convert)\n",
    "\n",
    "df_pfb.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "id": "4d90c079-31c4-4f53-b460-372008bd5857",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 指定 header 表示将第一行和第二行作为索引\n",
    "df_pfb.to_excel('./体测成绩评分表_处理.xlsx', header=[0, 1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "id": "24f06ca0-1dc3-4727-bd9a-9981d14e49f6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">男肺活量</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女肺活量</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男50米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女50米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男体前屈</th>\n",
       "      <th>...</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女跳远</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男引体</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女仰卧</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男1000米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女800米跑</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>...</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4540</td>\n",
       "      <td>100</td>\n",
       "      <td>3150</td>\n",
       "      <td>100</td>\n",
       "      <td>7.1</td>\n",
       "      <td>100</td>\n",
       "      <td>7.8</td>\n",
       "      <td>100</td>\n",
       "      <td>23.6</td>\n",
       "      <td>100</td>\n",
       "      <td>...</td>\n",
       "      <td>204</td>\n",
       "      <td>100</td>\n",
       "      <td>16.0</td>\n",
       "      <td>100</td>\n",
       "      <td>53</td>\n",
       "      <td>100</td>\n",
       "      <td>3.30</td>\n",
       "      <td>100</td>\n",
       "      <td>3.24</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4420</td>\n",
       "      <td>95</td>\n",
       "      <td>3100</td>\n",
       "      <td>95</td>\n",
       "      <td>7.2</td>\n",
       "      <td>95</td>\n",
       "      <td>7.9</td>\n",
       "      <td>95</td>\n",
       "      <td>21.5</td>\n",
       "      <td>95</td>\n",
       "      <td>...</td>\n",
       "      <td>198</td>\n",
       "      <td>95</td>\n",
       "      <td>15.0</td>\n",
       "      <td>95</td>\n",
       "      <td>51</td>\n",
       "      <td>95</td>\n",
       "      <td>3.35</td>\n",
       "      <td>95</td>\n",
       "      <td>3.30</td>\n",
       "      <td>95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4300</td>\n",
       "      <td>90</td>\n",
       "      <td>3050</td>\n",
       "      <td>90</td>\n",
       "      <td>7.3</td>\n",
       "      <td>90</td>\n",
       "      <td>8.0</td>\n",
       "      <td>90</td>\n",
       "      <td>19.4</td>\n",
       "      <td>90</td>\n",
       "      <td>...</td>\n",
       "      <td>192</td>\n",
       "      <td>90</td>\n",
       "      <td>14.0</td>\n",
       "      <td>90</td>\n",
       "      <td>49</td>\n",
       "      <td>90</td>\n",
       "      <td>3.40</td>\n",
       "      <td>90</td>\n",
       "      <td>3.36</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4050</td>\n",
       "      <td>85</td>\n",
       "      <td>2900</td>\n",
       "      <td>85</td>\n",
       "      <td>7.4</td>\n",
       "      <td>85</td>\n",
       "      <td>8.3</td>\n",
       "      <td>85</td>\n",
       "      <td>17.2</td>\n",
       "      <td>85</td>\n",
       "      <td>...</td>\n",
       "      <td>185</td>\n",
       "      <td>85</td>\n",
       "      <td>13.0</td>\n",
       "      <td>85</td>\n",
       "      <td>46</td>\n",
       "      <td>85</td>\n",
       "      <td>3.47</td>\n",
       "      <td>85</td>\n",
       "      <td>3.43</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3800</td>\n",
       "      <td>80</td>\n",
       "      <td>2750</td>\n",
       "      <td>80</td>\n",
       "      <td>7.5</td>\n",
       "      <td>80</td>\n",
       "      <td>8.6</td>\n",
       "      <td>80</td>\n",
       "      <td>15.0</td>\n",
       "      <td>80</td>\n",
       "      <td>...</td>\n",
       "      <td>178</td>\n",
       "      <td>80</td>\n",
       "      <td>12.0</td>\n",
       "      <td>80</td>\n",
       "      <td>43</td>\n",
       "      <td>80</td>\n",
       "      <td>3.55</td>\n",
       "      <td>80</td>\n",
       "      <td>3.50</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   男肺活量       女肺活量      男50米跑      女50米跑       男体前屈       ...  女跳远        男引体  \\\n",
       "     成绩   分数    成绩   分数    成绩   分数    成绩   分数    成绩   分数  ...   成绩   分数    成绩   \n",
       "0  4540  100  3150  100   7.1  100   7.8  100  23.6  100  ...  204  100  16.0   \n",
       "1  4420   95  3100   95   7.2   95   7.9   95  21.5   95  ...  198   95  15.0   \n",
       "2  4300   90  3050   90   7.3   90   8.0   90  19.4   90  ...  192   90  14.0   \n",
       "3  4050   85  2900   85   7.4   85   8.3   85  17.2   85  ...  185   85  13.0   \n",
       "4  3800   80  2750   80   7.5   80   8.6   80  15.0   80  ...  178   80  12.0   \n",
       "\n",
       "       女仰卧      男1000米跑      女800米跑       \n",
       "    分数  成绩   分数      成绩   分数     成绩   分数  \n",
       "0  100  53  100    3.30  100   3.24  100  \n",
       "1   95  51   95    3.35   95   3.30   95  \n",
       "2   90  49   90    3.40   90   3.36   90  \n",
       "3   85  46   85    3.47   85   3.43   85  \n",
       "4   80  43   80    3.55   80   3.50   80  \n",
       "\n",
       "[5 rows x 24 columns]"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 指定 index_col 为 0 表示用第 1 列作为行索引\n",
    "pd.read_excel('./体测成绩评分表_处理.xlsx', header=[0, 1], index_col=0).head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ccb7788e-d2e9-48f8-9efc-65a1c3ed011e",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "### No.4"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "13a63813-8c25-4f71-a2fe-9865ba12d1d4",
   "metadata": {},
   "source": [
    "#### 男生数据\n",
    "\n",
    "1. 将男生体测成绩转为分数，将运动类型分为速度型和力量型单独计算\n",
    "2. 持久化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "id": "7964cf17-0505-4fbf-9a0e-1285161aeda4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>男1000米跑</th>\n",
       "      <th>男50米跑</th>\n",
       "      <th>男跳远</th>\n",
       "      <th>男体前屈</th>\n",
       "      <th>男引体</th>\n",
       "      <th>男肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*森18</td>\n",
       "      <td>5.19</td>\n",
       "      <td>9.55</td>\n",
       "      <td>210</td>\n",
       "      <td>15</td>\n",
       "      <td>6</td>\n",
       "      <td>7042</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>男</td>\n",
       "      <td>苏*飞27</td>\n",
       "      <td>4.12</td>\n",
       "      <td>8.60</td>\n",
       "      <td>215</td>\n",
       "      <td>15</td>\n",
       "      <td>11</td>\n",
       "      <td>3458</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>男</td>\n",
       "      <td>寻*潇13</td>\n",
       "      <td>4.17</td>\n",
       "      <td>8.16</td>\n",
       "      <td>215</td>\n",
       "      <td>14</td>\n",
       "      <td>4</td>\n",
       "      <td>4336</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*冉36</td>\n",
       "      <td>4.19</td>\n",
       "      <td>8.96</td>\n",
       "      <td>205</td>\n",
       "      <td>14</td>\n",
       "      <td>0</td>\n",
       "      <td>4539</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>男</td>\n",
       "      <td>王*磊40</td>\n",
       "      <td>0.00</td>\n",
       "      <td>8.30</td>\n",
       "      <td>230</td>\n",
       "      <td>14</td>\n",
       "      <td>9</td>\n",
       "      <td>6059</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名  男1000米跑  男50米跑  男跳远  男体前屈  男引体  男肺活量\n",
       "0  男  郭*森18     5.19   9.55  210    15    6  7042\n",
       "1  男  苏*飞27     4.12   8.60  215    15   11  3458\n",
       "2  男  寻*潇13     4.17   8.16  215    14    4  4336\n",
       "3  男  郭*冉36     4.19   8.96  205    14    0  4539\n",
       "4  男  王*磊40     0.00   8.30  230    14    9  6059"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读取 1. 中处理后导出的数据\n",
    "df_boys = pd.read_excel('体测成绩_男生_处理.xlsx', index_col=0)\n",
    "df_boys.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "id": "c9bce472-6709-4b05-a2df-ff9d02940b0a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">男肺活量</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女肺活量</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男50米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女50米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男体前屈</th>\n",
       "      <th>...</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女跳远</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男引体</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女仰卧</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男1000米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女800米跑</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>...</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4540</td>\n",
       "      <td>100</td>\n",
       "      <td>3150</td>\n",
       "      <td>100</td>\n",
       "      <td>7.1</td>\n",
       "      <td>100</td>\n",
       "      <td>7.8</td>\n",
       "      <td>100</td>\n",
       "      <td>23.6</td>\n",
       "      <td>100</td>\n",
       "      <td>...</td>\n",
       "      <td>204</td>\n",
       "      <td>100</td>\n",
       "      <td>16.0</td>\n",
       "      <td>100</td>\n",
       "      <td>53</td>\n",
       "      <td>100</td>\n",
       "      <td>3.30</td>\n",
       "      <td>100</td>\n",
       "      <td>3.24</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4420</td>\n",
       "      <td>95</td>\n",
       "      <td>3100</td>\n",
       "      <td>95</td>\n",
       "      <td>7.2</td>\n",
       "      <td>95</td>\n",
       "      <td>7.9</td>\n",
       "      <td>95</td>\n",
       "      <td>21.5</td>\n",
       "      <td>95</td>\n",
       "      <td>...</td>\n",
       "      <td>198</td>\n",
       "      <td>95</td>\n",
       "      <td>15.0</td>\n",
       "      <td>95</td>\n",
       "      <td>51</td>\n",
       "      <td>95</td>\n",
       "      <td>3.35</td>\n",
       "      <td>95</td>\n",
       "      <td>3.30</td>\n",
       "      <td>95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4300</td>\n",
       "      <td>90</td>\n",
       "      <td>3050</td>\n",
       "      <td>90</td>\n",
       "      <td>7.3</td>\n",
       "      <td>90</td>\n",
       "      <td>8.0</td>\n",
       "      <td>90</td>\n",
       "      <td>19.4</td>\n",
       "      <td>90</td>\n",
       "      <td>...</td>\n",
       "      <td>192</td>\n",
       "      <td>90</td>\n",
       "      <td>14.0</td>\n",
       "      <td>90</td>\n",
       "      <td>49</td>\n",
       "      <td>90</td>\n",
       "      <td>3.40</td>\n",
       "      <td>90</td>\n",
       "      <td>3.36</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4050</td>\n",
       "      <td>85</td>\n",
       "      <td>2900</td>\n",
       "      <td>85</td>\n",
       "      <td>7.4</td>\n",
       "      <td>85</td>\n",
       "      <td>8.3</td>\n",
       "      <td>85</td>\n",
       "      <td>17.2</td>\n",
       "      <td>85</td>\n",
       "      <td>...</td>\n",
       "      <td>185</td>\n",
       "      <td>85</td>\n",
       "      <td>13.0</td>\n",
       "      <td>85</td>\n",
       "      <td>46</td>\n",
       "      <td>85</td>\n",
       "      <td>3.47</td>\n",
       "      <td>85</td>\n",
       "      <td>3.43</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3800</td>\n",
       "      <td>80</td>\n",
       "      <td>2750</td>\n",
       "      <td>80</td>\n",
       "      <td>7.5</td>\n",
       "      <td>80</td>\n",
       "      <td>8.6</td>\n",
       "      <td>80</td>\n",
       "      <td>15.0</td>\n",
       "      <td>80</td>\n",
       "      <td>...</td>\n",
       "      <td>178</td>\n",
       "      <td>80</td>\n",
       "      <td>12.0</td>\n",
       "      <td>80</td>\n",
       "      <td>43</td>\n",
       "      <td>80</td>\n",
       "      <td>3.55</td>\n",
       "      <td>80</td>\n",
       "      <td>3.50</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   男肺活量       女肺活量      男50米跑      女50米跑       男体前屈       ...  女跳远        男引体  \\\n",
       "     成绩   分数    成绩   分数    成绩   分数    成绩   分数    成绩   分数  ...   成绩   分数    成绩   \n",
       "0  4540  100  3150  100   7.1  100   7.8  100  23.6  100  ...  204  100  16.0   \n",
       "1  4420   95  3100   95   7.2   95   7.9   95  21.5   95  ...  198   95  15.0   \n",
       "2  4300   90  3050   90   7.3   90   8.0   90  19.4   90  ...  192   90  14.0   \n",
       "3  4050   85  2900   85   7.4   85   8.3   85  17.2   85  ...  185   85  13.0   \n",
       "4  3800   80  2750   80   7.5   80   8.6   80  15.0   80  ...  178   80  12.0   \n",
       "\n",
       "       女仰卧      男1000米跑      女800米跑       \n",
       "    分数  成绩   分数      成绩   分数     成绩   分数  \n",
       "0  100  53  100    3.30  100   3.24  100  \n",
       "1   95  51   95    3.35   95   3.30   95  \n",
       "2   90  49   90    3.40   90   3.36   90  \n",
       "3   85  46   85    3.47   85   3.43   85  \n",
       "4   80  43   80    3.55   80   3.50   80  \n",
       "\n",
       "[5 rows x 24 columns]"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 加载处理后的评分表\n",
    "df_pfb2 = pd.read_excel('./体测成绩评分表_处理.xlsx', header=[0, 1], index_col=0)\n",
    "df_pfb2.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "id": "6ac59729-8934-464b-b790-467309bc102f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 3.7 s, sys: 28.3 ms, total: 3.72 s\n",
      "Wall time: 3.72 s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0       40\n",
       "1       72\n",
       "2       70\n",
       "3       70\n",
       "4        0\n",
       "        ..\n",
       "1080    76\n",
       "1081    80\n",
       "1082    50\n",
       "1083    66\n",
       "1084    70\n",
       "Name: 男1000米跑, Length: 1085, dtype: int64"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "def convert(x):\n",
    "    if x == 0: # 没参加考试\n",
    "        return 0\n",
    "    for i in range(20): # 20 个成绩等级\n",
    "        if x <= df_pfb2['男1000米跑']['成绩'][i]:\n",
    "            return df_pfb2['男1000米跑']['分数'][i]\n",
    "    return 0 # 跑的太慢了，超出了所有等级，视作无效\n",
    "\n",
    "df_boys['男1000米跑'].apply(convert)\n",
    "\n",
    "# 直接插入最后一列\n",
    "#df_boys['男1000米跑分数'] = df_boys['男1000米跑'].apply(convert)\n",
    "#df_boys.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9919f72c-b946-4c2d-ae81-70083a399fc1",
   "metadata": {},
   "source": [
    "**通用写法**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "id": "d0853692-0211-4e07-9151-073f6a6115c8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 7.52 s, sys: 63.6 ms, total: 7.59 s\n",
      "Wall time: 7.56 s\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>男1000米跑</th>\n",
       "      <th>男1000米跑分数</th>\n",
       "      <th>男50米跑</th>\n",
       "      <th>男50米跑分数</th>\n",
       "      <th>男跳远</th>\n",
       "      <th>男体前屈</th>\n",
       "      <th>男引体</th>\n",
       "      <th>男肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*森18</td>\n",
       "      <td>5.19</td>\n",
       "      <td>40</td>\n",
       "      <td>9.55</td>\n",
       "      <td>50</td>\n",
       "      <td>210</td>\n",
       "      <td>15</td>\n",
       "      <td>6</td>\n",
       "      <td>7042</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>男</td>\n",
       "      <td>苏*飞27</td>\n",
       "      <td>4.12</td>\n",
       "      <td>72</td>\n",
       "      <td>8.60</td>\n",
       "      <td>68</td>\n",
       "      <td>215</td>\n",
       "      <td>15</td>\n",
       "      <td>11</td>\n",
       "      <td>3458</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>男</td>\n",
       "      <td>寻*潇13</td>\n",
       "      <td>4.17</td>\n",
       "      <td>70</td>\n",
       "      <td>8.16</td>\n",
       "      <td>72</td>\n",
       "      <td>215</td>\n",
       "      <td>14</td>\n",
       "      <td>4</td>\n",
       "      <td>4336</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*冉36</td>\n",
       "      <td>4.19</td>\n",
       "      <td>70</td>\n",
       "      <td>8.96</td>\n",
       "      <td>64</td>\n",
       "      <td>205</td>\n",
       "      <td>14</td>\n",
       "      <td>0</td>\n",
       "      <td>4539</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>男</td>\n",
       "      <td>王*磊40</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0</td>\n",
       "      <td>8.30</td>\n",
       "      <td>72</td>\n",
       "      <td>230</td>\n",
       "      <td>14</td>\n",
       "      <td>9</td>\n",
       "      <td>6059</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名  男1000米跑  男1000米跑分数  男50米跑  男50米跑分数  男跳远  男体前屈  男引体  男肺活量\n",
       "0  男  郭*森18     5.19         40   9.55       50  210    15    6  7042\n",
       "1  男  苏*飞27     4.12         72   8.60       68  215    15   11  3458\n",
       "2  男  寻*潇13     4.17         70   8.16       72  215    14    4  4336\n",
       "3  男  郭*冉36     4.19         70   8.96       64  205    14    0  4539\n",
       "4  男  王*磊40     0.00          0   8.30       72  230    14    9  6059"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "cols = ['男1000米跑', '男50米跑']\n",
    "\n",
    "def convert(x, col):\n",
    "    if x == 0: # 没参加考试\n",
    "        return 0\n",
    "    for i in range(20): # 20 个成绩等级\n",
    "        if x <= df_pfb2[col]['成绩'][i]:\n",
    "            return df_pfb2[col]['分数'][i]\n",
    "    return 0 # 跑的太慢了，超出了所有等级，视作无效\n",
    "\n",
    "for col in cols:\n",
    "    s = df_boys[col].apply(convert, args=(col,))\n",
    "    col_idx = list(df_boys.columns).index(col) + 1\n",
    "    df_boys.insert(loc=col_idx, column=col+'分数', value=s)\n",
    "\n",
    "df_boys.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f05eaf04-f6b8-4885-8307-379ec8ba7c37",
   "metadata": {},
   "source": [
    "**力量型运动转换**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "id": "78c94153-4cf3-4f83-9af0-e5a8f4a1758a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 14.8 s, sys: 133 ms, total: 15 s\n",
      "Wall time: 14.9 s\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>男1000米跑</th>\n",
       "      <th>男1000米跑分数</th>\n",
       "      <th>男50米跑</th>\n",
       "      <th>男50米跑分数</th>\n",
       "      <th>男跳远</th>\n",
       "      <th>男跳远分数</th>\n",
       "      <th>男体前屈</th>\n",
       "      <th>男体前屈分数</th>\n",
       "      <th>男引体</th>\n",
       "      <th>男引体分数</th>\n",
       "      <th>男肺活量</th>\n",
       "      <th>男肺活量分数</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*森18</td>\n",
       "      <td>5.19</td>\n",
       "      <td>40</td>\n",
       "      <td>9.55</td>\n",
       "      <td>50</td>\n",
       "      <td>210</td>\n",
       "      <td>66</td>\n",
       "      <td>15</td>\n",
       "      <td>80</td>\n",
       "      <td>6</td>\n",
       "      <td>50</td>\n",
       "      <td>7042</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>男</td>\n",
       "      <td>苏*飞27</td>\n",
       "      <td>4.12</td>\n",
       "      <td>72</td>\n",
       "      <td>8.60</td>\n",
       "      <td>68</td>\n",
       "      <td>215</td>\n",
       "      <td>70</td>\n",
       "      <td>15</td>\n",
       "      <td>80</td>\n",
       "      <td>11</td>\n",
       "      <td>76</td>\n",
       "      <td>3458</td>\n",
       "      <td>74</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>男</td>\n",
       "      <td>寻*潇13</td>\n",
       "      <td>4.17</td>\n",
       "      <td>70</td>\n",
       "      <td>8.16</td>\n",
       "      <td>72</td>\n",
       "      <td>215</td>\n",
       "      <td>70</td>\n",
       "      <td>14</td>\n",
       "      <td>78</td>\n",
       "      <td>4</td>\n",
       "      <td>30</td>\n",
       "      <td>4336</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*冉36</td>\n",
       "      <td>4.19</td>\n",
       "      <td>70</td>\n",
       "      <td>8.96</td>\n",
       "      <td>64</td>\n",
       "      <td>205</td>\n",
       "      <td>64</td>\n",
       "      <td>14</td>\n",
       "      <td>78</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>4539</td>\n",
       "      <td>95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>男</td>\n",
       "      <td>王*磊40</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0</td>\n",
       "      <td>8.30</td>\n",
       "      <td>72</td>\n",
       "      <td>230</td>\n",
       "      <td>76</td>\n",
       "      <td>14</td>\n",
       "      <td>78</td>\n",
       "      <td>9</td>\n",
       "      <td>68</td>\n",
       "      <td>6059</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名  男1000米跑  男1000米跑分数  男50米跑  男50米跑分数  男跳远  男跳远分数  男体前屈  男体前屈分数  \\\n",
       "0  男  郭*森18     5.19         40   9.55       50  210     66    15      80   \n",
       "1  男  苏*飞27     4.12         72   8.60       68  215     70    15      80   \n",
       "2  男  寻*潇13     4.17         70   8.16       72  215     70    14      78   \n",
       "3  男  郭*冉36     4.19         70   8.96       64  205     64    14      78   \n",
       "4  男  王*磊40     0.00          0   8.30       72  230     76    14      78   \n",
       "\n",
       "   男引体  男引体分数  男肺活量  男肺活量分数  \n",
       "0    6     50  7042     100  \n",
       "1   11     76  3458      74  \n",
       "2    4     30  4336      90  \n",
       "3    0      0  4539      95  \n",
       "4    9     68  6059     100  "
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "cols = ['男跳远', '男体前屈', '男引体', '男肺活量']\n",
    "\n",
    "def convert2(x, col):\n",
    "    if x == 0: # 没参加考试\n",
    "        return 0\n",
    "    for i in range(20): # 20 个成绩等级\n",
    "        if x >= df_pfb2[col]['成绩'][i]:\n",
    "            return df_pfb2[col]['分数'][i]\n",
    "    return 0 # 跑的太慢了，超出了所有等级，视作无效\n",
    "\n",
    "for col in cols:\n",
    "    s = df_boys[col].apply(convert2, args=(col,))\n",
    "    col_idx = list(df_boys.columns).index(col) + 1\n",
    "    df_boys.insert(loc=col_idx, column=col+'分数', value=s)\n",
    "\n",
    "df_boys.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "id": "a654c3ee-b5fe-4a30-84bb-8590c20f9726",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_boys.to_excel('体测分数_男生_处理.xlsx', header=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0ccf5b2b-5945-4a2b-b7b7-b0d1967620e7",
   "metadata": {},
   "source": [
    "#### 女生数据\n",
    "\n",
    "1. 将女生体测成绩转为分数，将运动类型分为速度型和力量型单独计算\n",
    "2. 持久化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "id": "c6474d5c-a121-4f37-a5e2-512a7f156a3f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>女800米跑</th>\n",
       "      <th>女800米跑分数</th>\n",
       "      <th>女50米跑</th>\n",
       "      <th>女50米跑分数</th>\n",
       "      <th>女跳远</th>\n",
       "      <th>女体前屈</th>\n",
       "      <th>女仰卧</th>\n",
       "      <th>女肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>女</td>\n",
       "      <td>李*帆6</td>\n",
       "      <td>4.00</td>\n",
       "      <td>76</td>\n",
       "      <td>9.92</td>\n",
       "      <td>66</td>\n",
       "      <td>172</td>\n",
       "      <td>23</td>\n",
       "      <td>40</td>\n",
       "      <td>2348</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>女</td>\n",
       "      <td>吕*璇40</td>\n",
       "      <td>3.55</td>\n",
       "      <td>78</td>\n",
       "      <td>10.94</td>\n",
       "      <td>40</td>\n",
       "      <td>160</td>\n",
       "      <td>14</td>\n",
       "      <td>39</td>\n",
       "      <td>2588</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>女</td>\n",
       "      <td>任*哲30</td>\n",
       "      <td>3.29</td>\n",
       "      <td>95</td>\n",
       "      <td>8.79</td>\n",
       "      <td>78</td>\n",
       "      <td>150</td>\n",
       "      <td>17</td>\n",
       "      <td>36</td>\n",
       "      <td>3043</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>女</td>\n",
       "      <td>李*琦13</td>\n",
       "      <td>3.36</td>\n",
       "      <td>90</td>\n",
       "      <td>10.16</td>\n",
       "      <td>64</td>\n",
       "      <td>167</td>\n",
       "      <td>13</td>\n",
       "      <td>41</td>\n",
       "      <td>3276</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>女</td>\n",
       "      <td>高*润32</td>\n",
       "      <td>3.49</td>\n",
       "      <td>80</td>\n",
       "      <td>9.99</td>\n",
       "      <td>66</td>\n",
       "      <td>160</td>\n",
       "      <td>10</td>\n",
       "      <td>40</td>\n",
       "      <td>2410</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名  女800米跑  女800米跑分数  女50米跑  女50米跑分数  女跳远  女体前屈  女仰卧  女肺活量\n",
       "0  女   李*帆6    4.00        76   9.92       66  172    23   40  2348\n",
       "1  女  吕*璇40    3.55        78  10.94       40  160    14   39  2588\n",
       "2  女  任*哲30    3.29        95   8.79       78  150    17   36  3043\n",
       "3  女  李*琦13    3.36        90  10.16       64  167    13   41  3276\n",
       "4  女  高*润32    3.49        80   9.99       66  160    10   40  2410"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读取 1. 中处理后导出的数据\n",
    "df_girls = pd.read_excel('体测成绩_女生_处理.xlsx', index_col=0)\n",
    "\n",
    "# 加载处理后的评分表\n",
    "df_pfb2 = pd.read_excel('./体测成绩评分表_处理.xlsx', header=[0, 1], index_col=0)\n",
    "\n",
    "#----------速度型运动成绩转换---------------\n",
    "\n",
    "cols = ['女800米跑', '女50米跑']\n",
    "def convert(x, col):\n",
    "    if x == 0: # 没参加考试\n",
    "        return 0\n",
    "    for i in range(20): # 20 个成绩等级\n",
    "        if x <= df_pfb2[col]['成绩'][i]:\n",
    "            return df_pfb2[col]['分数'][i]\n",
    "    return 0 # 跑的太慢了，超出了所有等级，视作无效\n",
    "\n",
    "for col in cols:\n",
    "    s = df_girls[col].apply(convert, args=(col,))\n",
    "    col_idx = list(df_girls.columns).index(col) + 1\n",
    "    df_girls.insert(loc=col_idx, column=col+'分数', value=s)\n",
    "\n",
    "df_girls.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "id": "b47a7565-3253-467c-81e5-a90ab2d740bd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>女800米跑</th>\n",
       "      <th>女800米跑分数</th>\n",
       "      <th>女50米跑</th>\n",
       "      <th>女50米跑分数</th>\n",
       "      <th>女跳远</th>\n",
       "      <th>女跳远分数</th>\n",
       "      <th>女体前屈</th>\n",
       "      <th>女体前屈分数</th>\n",
       "      <th>女仰卧</th>\n",
       "      <th>女仰卧分数</th>\n",
       "      <th>女肺活量</th>\n",
       "      <th>女肺活量分数</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>女</td>\n",
       "      <td>李*帆6</td>\n",
       "      <td>4.00</td>\n",
       "      <td>76</td>\n",
       "      <td>9.92</td>\n",
       "      <td>66</td>\n",
       "      <td>172</td>\n",
       "      <td>76</td>\n",
       "      <td>23</td>\n",
       "      <td>95</td>\n",
       "      <td>40</td>\n",
       "      <td>76</td>\n",
       "      <td>2348</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>女</td>\n",
       "      <td>吕*璇40</td>\n",
       "      <td>3.55</td>\n",
       "      <td>78</td>\n",
       "      <td>10.94</td>\n",
       "      <td>40</td>\n",
       "      <td>160</td>\n",
       "      <td>68</td>\n",
       "      <td>14</td>\n",
       "      <td>74</td>\n",
       "      <td>39</td>\n",
       "      <td>76</td>\n",
       "      <td>2588</td>\n",
       "      <td>76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>女</td>\n",
       "      <td>任*哲30</td>\n",
       "      <td>3.29</td>\n",
       "      <td>95</td>\n",
       "      <td>8.79</td>\n",
       "      <td>78</td>\n",
       "      <td>150</td>\n",
       "      <td>60</td>\n",
       "      <td>17</td>\n",
       "      <td>78</td>\n",
       "      <td>36</td>\n",
       "      <td>72</td>\n",
       "      <td>3043</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>女</td>\n",
       "      <td>李*琦13</td>\n",
       "      <td>3.36</td>\n",
       "      <td>90</td>\n",
       "      <td>10.16</td>\n",
       "      <td>64</td>\n",
       "      <td>167</td>\n",
       "      <td>72</td>\n",
       "      <td>13</td>\n",
       "      <td>72</td>\n",
       "      <td>41</td>\n",
       "      <td>78</td>\n",
       "      <td>3276</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>女</td>\n",
       "      <td>高*润32</td>\n",
       "      <td>3.49</td>\n",
       "      <td>80</td>\n",
       "      <td>9.99</td>\n",
       "      <td>66</td>\n",
       "      <td>160</td>\n",
       "      <td>68</td>\n",
       "      <td>10</td>\n",
       "      <td>68</td>\n",
       "      <td>40</td>\n",
       "      <td>76</td>\n",
       "      <td>2410</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名  女800米跑  女800米跑分数  女50米跑  女50米跑分数  女跳远  女跳远分数  女体前屈  女体前屈分数  女仰卧  \\\n",
       "0  女   李*帆6    4.00        76   9.92       66  172     76    23      95   40   \n",
       "1  女  吕*璇40    3.55        78  10.94       40  160     68    14      74   39   \n",
       "2  女  任*哲30    3.29        95   8.79       78  150     60    17      78   36   \n",
       "3  女  李*琦13    3.36        90  10.16       64  167     72    13      72   41   \n",
       "4  女  高*润32    3.49        80   9.99       66  160     68    10      68   40   \n",
       "\n",
       "   女仰卧分数  女肺活量  女肺活量分数  \n",
       "0     76  2348      70  \n",
       "1     76  2588      76  \n",
       "2     72  3043      85  \n",
       "3     78  3276     100  \n",
       "4     76  2410      72  "
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#----------力量型运动成绩转换---------------\n",
    "cols = ['女跳远', '女体前屈', '女仰卧', '女肺活量']\n",
    "\n",
    "def convert2(x, col):\n",
    "    if x == 0: # 没参加考试\n",
    "        return 0\n",
    "    for i in range(20): # 20 个成绩等级\n",
    "        if x >= df_pfb2[col]['成绩'][i]:\n",
    "            return df_pfb2[col]['分数'][i]\n",
    "    return 0 # 跑的太慢了，超出了所有等级，视作无效\n",
    "\n",
    "for col in cols:\n",
    "    s = df_girls[col].apply(convert2, args=(col,))\n",
    "    col_idx = list(df_girls.columns).index(col) + 1\n",
    "    df_girls.insert(loc=col_idx, column=col+'分数', value=s)\n",
    "\n",
    "df_girls.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "id": "cddd90e9-1c15-4e89-82a5-8a6e1f40e222",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_girls.to_excel('体测分数_女生_处理.xlsx', header=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "id": "93919dda-4911-4ac1-a187-01fc235baff1",
   "metadata": {},
   "outputs": [],
   "source": [
    "with pd.ExcelWriter('体测分数_男生_女生_处理.xlsx') as w:\n",
    "    df_boys.to_excel(w, sheet_name='男生', index=False)\n",
    "    df_girls.to_excel(w, sheet_name='女生', index=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ca85eab5-a51b-423b-8b86-262c6d4d1543",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 数据重塑"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ca78728-0dde-4f17-9793-32fff7bec1ee",
   "metadata": {},
   "source": [
    "### 转置"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "id": "9ee34aaa-1f44-45dc-a7b7-8739f9a83d23",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>125</td>\n",
       "      <td>15</td>\n",
       "      <td>96</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>1</td>\n",
       "      <td>96</td>\n",
       "      <td>138</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>72</td>\n",
       "      <td>15</td>\n",
       "      <td>131</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>138</td>\n",
       "      <td>33</td>\n",
       "      <td>47</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>2</td>\n",
       "      <td>42</td>\n",
       "      <td>98</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>26</td>\n",
       "      <td>110</td>\n",
       "      <td>59</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>99</td>\n",
       "      <td>34</td>\n",
       "      <td>32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>62</td>\n",
       "      <td>23</td>\n",
       "      <td>139</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>33</td>\n",
       "      <td>49</td>\n",
       "      <td>86</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>97</td>\n",
       "      <td>2</td>\n",
       "      <td>128</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pytorch  Tensorflow  Keras\n",
       "A      125          15     96\n",
       "B        1          96    138\n",
       "C       72          15    131\n",
       "D      138          33     47\n",
       "E        2          42     98\n",
       "F       26         110     59\n",
       "G       99          34     32\n",
       "H       62          23    139\n",
       "I       33          49     86\n",
       "J       97           2    128"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "      <th>F</th>\n",
       "      <th>G</th>\n",
       "      <th>H</th>\n",
       "      <th>I</th>\n",
       "      <th>J</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Pytorch</th>\n",
       "      <td>125</td>\n",
       "      <td>1</td>\n",
       "      <td>72</td>\n",
       "      <td>138</td>\n",
       "      <td>2</td>\n",
       "      <td>26</td>\n",
       "      <td>99</td>\n",
       "      <td>62</td>\n",
       "      <td>33</td>\n",
       "      <td>97</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tensorflow</th>\n",
       "      <td>15</td>\n",
       "      <td>96</td>\n",
       "      <td>15</td>\n",
       "      <td>33</td>\n",
       "      <td>42</td>\n",
       "      <td>110</td>\n",
       "      <td>34</td>\n",
       "      <td>23</td>\n",
       "      <td>49</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>96</td>\n",
       "      <td>138</td>\n",
       "      <td>131</td>\n",
       "      <td>47</td>\n",
       "      <td>98</td>\n",
       "      <td>59</td>\n",
       "      <td>32</td>\n",
       "      <td>139</td>\n",
       "      <td>86</td>\n",
       "      <td>128</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              A    B    C    D   E    F   G    H   I    J\n",
       "Pytorch     125    1   72  138   2   26  99   62  33   97\n",
       "Tensorflow   15   96   15   33  42  110  34   23  49    2\n",
       "Keras        96  138  131   47  98   59  32  139  86  128"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 150, size=(10, 3)),\n",
    "                   index=list('ABCDEFGHIJ'),\n",
    "                   columns=['Pytorch', 'Tensorflow', 'Keras'])\n",
    "\n",
    "display(df)\n",
    "\n",
    "# 转置\n",
    "df.T"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "54ceca4c-f943-473c-a8bd-b6b8b29e7453",
   "metadata": {},
   "source": [
    "### 多层索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "id": "a7984a8d-e587-4ebf-b9b0-4e0f8e9887c1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">A</th>\n",
       "      <th>上</th>\n",
       "      <td>46</td>\n",
       "      <td>89</td>\n",
       "      <td>76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>72</td>\n",
       "      <td>3</td>\n",
       "      <td>37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">B</th>\n",
       "      <th>上</th>\n",
       "      <td>47</td>\n",
       "      <td>2</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>24</td>\n",
       "      <td>62</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">C</th>\n",
       "      <th>上</th>\n",
       "      <td>24</td>\n",
       "      <td>57</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>65</td>\n",
       "      <td>43</td>\n",
       "      <td>79</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">D</th>\n",
       "      <th>上</th>\n",
       "      <td>53</td>\n",
       "      <td>10</td>\n",
       "      <td>92</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>99</td>\n",
       "      <td>29</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">E</th>\n",
       "      <th>上</th>\n",
       "      <td>0</td>\n",
       "      <td>34</td>\n",
       "      <td>91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>57</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">F</th>\n",
       "      <th>上</th>\n",
       "      <td>52</td>\n",
       "      <td>38</td>\n",
       "      <td>42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>30</td>\n",
       "      <td>15</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">G</th>\n",
       "      <th>上</th>\n",
       "      <td>53</td>\n",
       "      <td>51</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>8</td>\n",
       "      <td>75</td>\n",
       "      <td>37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">H</th>\n",
       "      <th>上</th>\n",
       "      <td>54</td>\n",
       "      <td>85</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>72</td>\n",
       "      <td>24</td>\n",
       "      <td>58</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">I</th>\n",
       "      <th>上</th>\n",
       "      <td>34</td>\n",
       "      <td>61</td>\n",
       "      <td>41</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>47</td>\n",
       "      <td>21</td>\n",
       "      <td>86</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">J</th>\n",
       "      <th>上</th>\n",
       "      <td>16</td>\n",
       "      <td>53</td>\n",
       "      <td>97</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>46</td>\n",
       "      <td>97</td>\n",
       "      <td>39</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     Pytorch  Tensorflow  Keras\n",
       "A 上       46          89     76\n",
       "  下       72           3     37\n",
       "B 上       47           2     13\n",
       "  下       24          62      5\n",
       "C 上       24          57     70\n",
       "  下       65          43     79\n",
       "D 上       53          10     92\n",
       "  下       99          29     22\n",
       "E 上        0          34     91\n",
       "  下       57           4      5\n",
       "F 上       52          38     42\n",
       "  下       30          15     49\n",
       "G 上       53          51      4\n",
       "  下        8          75     37\n",
       "H 上       54          85     27\n",
       "  下       72          24     58\n",
       "I 上       34          61     41\n",
       "  下       47          21     86\n",
       "J 上       16          53     97\n",
       "  下       46          97     39"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(20, 3)),\n",
    "                   # ([第一层索引，第二层索引])，二者个数乘积是行数\n",
    "                   index=pd.MultiIndex.from_product([list('ABCDEFGHIJ'), ['上', '下']]),\n",
    "                   columns=['Pytorch', 'Tensorflow', 'Keras'])\n",
    "\n",
    "# 两层行索引\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "id": "e4d8ac3c-bd9d-454e-b260-e32a45234edf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">Pytorch</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Tensorflow</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Keras</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>上</th>\n",
       "      <th>下</th>\n",
       "      <th>上</th>\n",
       "      <th>下</th>\n",
       "      <th>上</th>\n",
       "      <th>下</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>46</td>\n",
       "      <td>72</td>\n",
       "      <td>89</td>\n",
       "      <td>3</td>\n",
       "      <td>76</td>\n",
       "      <td>37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>47</td>\n",
       "      <td>24</td>\n",
       "      <td>2</td>\n",
       "      <td>62</td>\n",
       "      <td>13</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>24</td>\n",
       "      <td>65</td>\n",
       "      <td>57</td>\n",
       "      <td>43</td>\n",
       "      <td>70</td>\n",
       "      <td>79</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>53</td>\n",
       "      <td>99</td>\n",
       "      <td>10</td>\n",
       "      <td>29</td>\n",
       "      <td>92</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>0</td>\n",
       "      <td>57</td>\n",
       "      <td>34</td>\n",
       "      <td>4</td>\n",
       "      <td>91</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>52</td>\n",
       "      <td>30</td>\n",
       "      <td>38</td>\n",
       "      <td>15</td>\n",
       "      <td>42</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>53</td>\n",
       "      <td>8</td>\n",
       "      <td>51</td>\n",
       "      <td>75</td>\n",
       "      <td>4</td>\n",
       "      <td>37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>54</td>\n",
       "      <td>72</td>\n",
       "      <td>85</td>\n",
       "      <td>24</td>\n",
       "      <td>27</td>\n",
       "      <td>58</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>34</td>\n",
       "      <td>47</td>\n",
       "      <td>61</td>\n",
       "      <td>21</td>\n",
       "      <td>41</td>\n",
       "      <td>86</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>16</td>\n",
       "      <td>46</td>\n",
       "      <td>53</td>\n",
       "      <td>97</td>\n",
       "      <td>97</td>\n",
       "      <td>39</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Pytorch     Tensorflow     Keras    \n",
       "        上   下          上   下     上   下\n",
       "A      46  72         89   3    76  37\n",
       "B      47  24          2  62    13   5\n",
       "C      24  65         57  43    70  79\n",
       "D      53  99         10  29    92  22\n",
       "E       0  57         34   4    91   5\n",
       "F      52  30         38  15    42  49\n",
       "G      53   8         51  75     4  37\n",
       "H      54  72         85  24    27  58\n",
       "I      34  47         61  21    41  86\n",
       "J      16  46         53  97    97  39"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"10\" halign=\"left\">Pytorch</th>\n",
       "      <th>...</th>\n",
       "      <th colspan=\"10\" halign=\"left\">Keras</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "      <th>F</th>\n",
       "      <th>G</th>\n",
       "      <th>H</th>\n",
       "      <th>I</th>\n",
       "      <th>J</th>\n",
       "      <th>...</th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "      <th>F</th>\n",
       "      <th>G</th>\n",
       "      <th>H</th>\n",
       "      <th>I</th>\n",
       "      <th>J</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>上</th>\n",
       "      <td>46</td>\n",
       "      <td>47</td>\n",
       "      <td>24</td>\n",
       "      <td>53</td>\n",
       "      <td>0</td>\n",
       "      <td>52</td>\n",
       "      <td>53</td>\n",
       "      <td>54</td>\n",
       "      <td>34</td>\n",
       "      <td>16</td>\n",
       "      <td>...</td>\n",
       "      <td>76</td>\n",
       "      <td>13</td>\n",
       "      <td>70</td>\n",
       "      <td>92</td>\n",
       "      <td>91</td>\n",
       "      <td>42</td>\n",
       "      <td>4</td>\n",
       "      <td>27</td>\n",
       "      <td>41</td>\n",
       "      <td>97</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>72</td>\n",
       "      <td>24</td>\n",
       "      <td>65</td>\n",
       "      <td>99</td>\n",
       "      <td>57</td>\n",
       "      <td>30</td>\n",
       "      <td>8</td>\n",
       "      <td>72</td>\n",
       "      <td>47</td>\n",
       "      <td>46</td>\n",
       "      <td>...</td>\n",
       "      <td>37</td>\n",
       "      <td>5</td>\n",
       "      <td>79</td>\n",
       "      <td>22</td>\n",
       "      <td>5</td>\n",
       "      <td>49</td>\n",
       "      <td>37</td>\n",
       "      <td>58</td>\n",
       "      <td>86</td>\n",
       "      <td>39</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2 rows × 30 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "  Pytorch                                      ... Keras                      \\\n",
       "        A   B   C   D   E   F   G   H   I   J  ...     A   B   C   D   E   F   \n",
       "上      46  47  24  53   0  52  53  54  34  16  ...    76  13  70  92  91  42   \n",
       "下      72  24  65  99  57  30   8  72  47  46  ...    37   5  79  22   5  49   \n",
       "\n",
       "                   \n",
       "    G   H   I   J  \n",
       "上   4  27  41  97  \n",
       "下  37  58  86  39  \n",
       "\n",
       "[2 rows x 30 columns]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# unstack：行索引变为列索引\n",
    "\n",
    "# 将第二级行索引变为第二级列索引，level=-1表示倒数第一级别索引，同为正数第二级别即level=1\n",
    "display(df.unstack(level = -1)) # level=-1为默认\n",
    "\n",
    "# 将第一级行索引变为第二级列索引\n",
    "display(df.unstack(level = 0)) # 或 level=-2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "id": "b30db42c-123c-45bf-8090-e7f8d4a54822",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A  上    211\n",
       "   下    112\n",
       "B  上     62\n",
       "   下     91\n",
       "C  上    151\n",
       "   下    187\n",
       "D  上    155\n",
       "   下    150\n",
       "E  上    125\n",
       "   下     66\n",
       "F  上    132\n",
       "   下     94\n",
       "G  上    108\n",
       "   下    120\n",
       "H  上    166\n",
       "   下    154\n",
       "I  上    136\n",
       "   下    154\n",
       "J  上    166\n",
       "   下    182\n",
       "dtype: int64"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#运算\n",
    "df.sum(axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e8c3cb65-108f-4897-a802-386d552a3d47",
   "metadata": {},
   "source": [
    "**多级列索引**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "id": "92aab2b6-6122-4d5b-9c79-ee702fdd0ea0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">Pytorch</th>\n",
       "      <th colspan=\"2\" halign=\"left\">English</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Keras</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>期中</th>\n",
       "      <th>期末</th>\n",
       "      <th>期中</th>\n",
       "      <th>期末</th>\n",
       "      <th>期中</th>\n",
       "      <th>期末</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>3</td>\n",
       "      <td>87</td>\n",
       "      <td>77</td>\n",
       "      <td>71</td>\n",
       "      <td>26</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>8</td>\n",
       "      <td>43</td>\n",
       "      <td>92</td>\n",
       "      <td>27</td>\n",
       "      <td>23</td>\n",
       "      <td>55</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>19</td>\n",
       "      <td>93</td>\n",
       "      <td>60</td>\n",
       "      <td>33</td>\n",
       "      <td>93</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>31</td>\n",
       "      <td>21</td>\n",
       "      <td>61</td>\n",
       "      <td>36</td>\n",
       "      <td>5</td>\n",
       "      <td>91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>26</td>\n",
       "      <td>3</td>\n",
       "      <td>19</td>\n",
       "      <td>19</td>\n",
       "      <td>55</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>47</td>\n",
       "      <td>67</td>\n",
       "      <td>77</td>\n",
       "      <td>27</td>\n",
       "      <td>74</td>\n",
       "      <td>89</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>65</td>\n",
       "      <td>87</td>\n",
       "      <td>56</td>\n",
       "      <td>37</td>\n",
       "      <td>59</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>34</td>\n",
       "      <td>39</td>\n",
       "      <td>41</td>\n",
       "      <td>28</td>\n",
       "      <td>94</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>51</td>\n",
       "      <td>32</td>\n",
       "      <td>25</td>\n",
       "      <td>58</td>\n",
       "      <td>30</td>\n",
       "      <td>91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>3</td>\n",
       "      <td>57</td>\n",
       "      <td>12</td>\n",
       "      <td>88</td>\n",
       "      <td>78</td>\n",
       "      <td>78</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Pytorch     English     Keras    \n",
       "       期中  期末      期中  期末    期中  期末\n",
       "A       3  87      77  71    26  21\n",
       "B       8  43      92  27    23  55\n",
       "C      19  93      60  33    93  28\n",
       "D      31  21      61  36     5  91\n",
       "E      26   3      19  19    55  70\n",
       "F      47  67      77  27    74  89\n",
       "G      65  87      56  37    59   1\n",
       "H      34  39      41  28    94  72\n",
       "I      51  32      25  58    30  91\n",
       "J       3  57      12  88    78  78"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = pd.DataFrame(np.random.randint(0, 100, size=(10, 6)),\n",
    "                   # ([第一层索引，第二层索引])，二者个数乘积是行数\n",
    "                   index=list('ABCDEFGHIJ'),\n",
    "                   columns=pd.MultiIndex.from_product([['Pytorch', 'English', 'Keras'], \n",
    "                                                       ['期中', '期末']]))\n",
    "\n",
    "# 两层行索引\n",
    "df2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "id": "7ee65531-6d16-4970-ac4e-db5e5956ae7e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>English</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">A</th>\n",
       "      <th>期中</th>\n",
       "      <td>3</td>\n",
       "      <td>77</td>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>87</td>\n",
       "      <td>71</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">B</th>\n",
       "      <th>期中</th>\n",
       "      <td>8</td>\n",
       "      <td>92</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>43</td>\n",
       "      <td>27</td>\n",
       "      <td>55</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">C</th>\n",
       "      <th>期中</th>\n",
       "      <td>19</td>\n",
       "      <td>60</td>\n",
       "      <td>93</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>93</td>\n",
       "      <td>33</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">D</th>\n",
       "      <th>期中</th>\n",
       "      <td>31</td>\n",
       "      <td>61</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>21</td>\n",
       "      <td>36</td>\n",
       "      <td>91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">E</th>\n",
       "      <th>期中</th>\n",
       "      <td>26</td>\n",
       "      <td>19</td>\n",
       "      <td>55</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>3</td>\n",
       "      <td>19</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">F</th>\n",
       "      <th>期中</th>\n",
       "      <td>47</td>\n",
       "      <td>77</td>\n",
       "      <td>74</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>67</td>\n",
       "      <td>27</td>\n",
       "      <td>89</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">G</th>\n",
       "      <th>期中</th>\n",
       "      <td>65</td>\n",
       "      <td>56</td>\n",
       "      <td>59</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>87</td>\n",
       "      <td>37</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">H</th>\n",
       "      <th>期中</th>\n",
       "      <td>34</td>\n",
       "      <td>41</td>\n",
       "      <td>94</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>39</td>\n",
       "      <td>28</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">I</th>\n",
       "      <th>期中</th>\n",
       "      <td>51</td>\n",
       "      <td>25</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>32</td>\n",
       "      <td>58</td>\n",
       "      <td>91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">J</th>\n",
       "      <th>期中</th>\n",
       "      <td>3</td>\n",
       "      <td>12</td>\n",
       "      <td>78</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>57</td>\n",
       "      <td>88</td>\n",
       "      <td>78</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Pytorch  English  Keras\n",
       "A 期中        3       77     26\n",
       "  期末       87       71     21\n",
       "B 期中        8       92     23\n",
       "  期末       43       27     55\n",
       "C 期中       19       60     93\n",
       "  期末       93       33     28\n",
       "D 期中       31       61      5\n",
       "  期末       21       36     91\n",
       "E 期中       26       19     55\n",
       "  期末        3       19     70\n",
       "F 期中       47       77     74\n",
       "  期末       67       27     89\n",
       "G 期中       65       56     59\n",
       "  期末       87       37      1\n",
       "H 期中       34       41     94\n",
       "  期末       39       28     72\n",
       "I 期中       51       25     30\n",
       "  期末       32       58     91\n",
       "J 期中        3       12     78\n",
       "  期末       57       88     78"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>期中</th>\n",
       "      <th>期末</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">A</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>3</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>77</td>\n",
       "      <td>71</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>26</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">B</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>8</td>\n",
       "      <td>43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>92</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>23</td>\n",
       "      <td>55</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">C</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>19</td>\n",
       "      <td>93</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>60</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>93</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">D</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>31</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>61</td>\n",
       "      <td>36</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>5</td>\n",
       "      <td>91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">E</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>26</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>19</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>55</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">F</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>47</td>\n",
       "      <td>67</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>77</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>74</td>\n",
       "      <td>89</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">G</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>65</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>56</td>\n",
       "      <td>37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>59</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">H</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>34</td>\n",
       "      <td>39</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>41</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>94</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">I</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>51</td>\n",
       "      <td>32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>25</td>\n",
       "      <td>58</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>30</td>\n",
       "      <td>91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">J</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>3</td>\n",
       "      <td>57</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>12</td>\n",
       "      <td>88</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>78</td>\n",
       "      <td>78</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           期中  期末\n",
       "A Pytorch   3  87\n",
       "  English  77  71\n",
       "  Keras    26  21\n",
       "B Pytorch   8  43\n",
       "  English  92  27\n",
       "  Keras    23  55\n",
       "C Pytorch  19  93\n",
       "  English  60  33\n",
       "  Keras    93  28\n",
       "D Pytorch  31  21\n",
       "  English  61  36\n",
       "  Keras     5  91\n",
       "E Pytorch  26   3\n",
       "  English  19  19\n",
       "  Keras    55  70\n",
       "F Pytorch  47  67\n",
       "  English  77  27\n",
       "  Keras    74  89\n",
       "G Pytorch  65  87\n",
       "  English  56  37\n",
       "  Keras    59   1\n",
       "H Pytorch  34  39\n",
       "  English  41  28\n",
       "  Keras    94  72\n",
       "I Pytorch  51  32\n",
       "  English  25  58\n",
       "  Keras    30  91\n",
       "J Pytorch   3  57\n",
       "  English  12  88\n",
       "  Keras    78  78"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# stack：列索引转为行索引\n",
    "\n",
    "#将第二级列索引转为第二级行索引\n",
    "display(df2.stack(future_stack=True, level=1))\n",
    "\n",
    "#将第一级列索引转为第二级行索引\n",
    "display(df2.stack(future_stack=True, level=0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "id": "b7069bcf-41c5-4800-b9e4-095b0bccded8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pytorch  期中    287\n",
       "         期末    529\n",
       "English  期中    520\n",
       "         期末    424\n",
       "Keras    期中    537\n",
       "         期末    596\n",
       "dtype: int64"
      ]
     },
     "execution_count": 97,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#运算\n",
    "df2.sum(axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "id": "3c3d1202-a6a5-4803-baa4-fd66cc2a1eb9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2['Pytorch', '期中']['A']"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "23bac5d7-5578-40b8-a177-cbfec9aa8ab3",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 数学和统计方法"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7861b3a3-d880-4ee3-9edd-75284b78815a",
   "metadata": {},
   "source": [
    "### 简单统计指标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "id": "c947e586-0270-4d44-b428-03c1d5646d5c",
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(20,3)),\n",
    "                  index=list('ABCDEFGHIJKLMNOPQRST'),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "\n",
    "def convert(x):\n",
    "    return np.NaN if x > 90 else x\n",
    "    \n",
    "df['Python'] = df['Python'].map(convert)\n",
    "df['Math'] = df['Math'].map(convert)\n",
    "df['English'] = df['English'].map(convert)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "id": "1c1c9c67-84e5-4985-96fa-126f10683abd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     18\n",
       "Math       19\n",
       "English    18\n",
       "dtype: int64"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Count non-NA cells for each column or row.\n",
    "df.count(axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "id": "274d077e-ce61-48d1-a15f-96f053d8648c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     84.0\n",
       "Math       86.0\n",
       "English    80.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Return the maximum of the values over the requested axis.\n",
    "df.max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "id": "dfa339fe-726d-40ed-a161-06adc41b86e5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     17.0\n",
       "Math        2.0\n",
       "English     3.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Return the minimum of the values over the requested axis.\n",
    "df.min()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "id": "b6311ef6-f64f-4234-89ba-e918c910a725",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     921.0\n",
       "Math       671.0\n",
       "English    702.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "id": "9ed2f96a-1cb8-4150-bed4-23a72256b9e6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     51.166667\n",
       "Math       35.315789\n",
       "English    39.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 104,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "id": "688a9226-0acd-49d8-9fb5-3ea6354ba565",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     53.5\n",
       "Math       36.0\n",
       "English    40.5\n",
       "dtype: float64"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Return the median of the values over the requested axis.\n",
    "df.median()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "id": "c6497091-36ea-47a8-8155-1217ae75d53a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     65.2\n",
       "Math       57.6\n",
       "English    58.2\n",
       "Name: 0.8, dtype: float64"
      ]
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#返回请求轴上给定分位数的值\n",
    "df.quantile(q = 0.8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "id": "3b274bbc-3898-4dd4-ae8f-70c17ea2e442",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>18.000000</td>\n",
       "      <td>19.000000</td>\n",
       "      <td>18.00000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>51.166667</td>\n",
       "      <td>35.315789</td>\n",
       "      <td>39.00000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>20.350603</td>\n",
       "      <td>24.888758</td>\n",
       "      <td>23.40186</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>17.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>3.00000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>33.750000</td>\n",
       "      <td>13.000000</td>\n",
       "      <td>22.25000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>53.500000</td>\n",
       "      <td>36.000000</td>\n",
       "      <td>40.50000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>63.750000</td>\n",
       "      <td>54.000000</td>\n",
       "      <td>52.50000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>84.000000</td>\n",
       "      <td>86.000000</td>\n",
       "      <td>80.00000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Python       Math   English\n",
       "count  18.000000  19.000000  18.00000\n",
       "mean   51.166667  35.315789  39.00000\n",
       "std    20.350603  24.888758  23.40186\n",
       "min    17.000000   2.000000   3.00000\n",
       "25%    33.750000  13.000000  22.25000\n",
       "50%    53.500000  36.000000  40.50000\n",
       "75%    63.750000  54.000000  52.50000\n",
       "max    84.000000  86.000000  80.00000"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9c45a317-a12f-442d-a8aa-524d5d60af84",
   "metadata": {},
   "source": [
    "### 索引标签和位置获取"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "id": "ac3cbb51-b06b-46c1-aaf2-0fd18096c063",
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(20,3)),\n",
    "                  index=list('ABCDEFGHIJKLMNOPQRST'),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "\n",
    "def convert(x):\n",
    "    return np.NaN if x > 90 else x\n",
    "    \n",
    "df['Python'] = df['Python'].map(convert)\n",
    "df['Math'] = df['Math'].map(convert)\n",
    "df['English'] = df['English'].map(convert)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "id": "f63d7c73-85ad-4e0a-9187-177000306d7a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9\n",
      "17\n",
      "17\n"
     ]
    }
   ],
   "source": [
    "#最小值索引\n",
    "min_idx = df['Python'].argmin()\n",
    "print(min_idx)\n",
    "print(df['Python'].iloc[min_idx])\n",
    "\n",
    "print(df['Python'].min())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "id": "835ce5ce-a1a8-458e-aecc-4432935853fe",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "19\n",
      "89\n",
      "89\n"
     ]
    }
   ],
   "source": [
    "#最大值索引\n",
    "max_idx = df['Python'].argmax()\n",
    "print(max_idx)\n",
    "print(df['Python'].iloc[max_idx])\n",
    "\n",
    "print(df['Python'].max())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "id": "8acc6134-2324-4ccf-bfcd-5cc60d268761",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "T\n",
      "89\n",
      "89\n"
     ]
    }
   ],
   "source": [
    "#最大值索引标签\n",
    "max_id = df['Python'].idxmax()\n",
    "print(max_id)\n",
    "print(df['Python'].loc[max_id])\n",
    "\n",
    "print(df['Python'].max())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "id": "7882019e-b681-4d5a-940a-6d1a2ab7f923",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "J\n",
      "17\n",
      "17\n"
     ]
    }
   ],
   "source": [
    "#最小值索引标签\n",
    "min_id = df['Python'].idxmin()\n",
    "print(min_id)\n",
    "print(df['Python'].loc[min_id])\n",
    "\n",
    "print(df['Python'].min())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a3d46ee-78f3-4c2b-b37a-09e07ef7a7fe",
   "metadata": {},
   "source": [
    "### 更多统计标签"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "id": "702c9173-9d61-40aa-9dee-4859c80d50a4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>78.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>25.0</td>\n",
       "      <td>81.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>76.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>70.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>80.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>17.0</td>\n",
       "      <td>48.0</td>\n",
       "      <td>54.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>42.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>36.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>NaN</td>\n",
       "      <td>84.0</td>\n",
       "      <td>30.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>41.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>58.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>67.0</td>\n",
       "      <td>88.0</td>\n",
       "      <td>42.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>71.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>39.0</td>\n",
       "      <td>31.0</td>\n",
       "      <td>25.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>85.0</td>\n",
       "      <td>60.0</td>\n",
       "      <td>40.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>68.0</td>\n",
       "      <td>87.0</td>\n",
       "      <td>31.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>N</th>\n",
       "      <td>3.0</td>\n",
       "      <td>53.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>17.0</td>\n",
       "      <td>80.0</td>\n",
       "      <td>59.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>80.0</td>\n",
       "      <td>59.0</td>\n",
       "      <td>53.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>48.0</td>\n",
       "      <td>72.0</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>86.0</td>\n",
       "      <td>90.0</td>\n",
       "      <td>74.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>44.0</td>\n",
       "      <td>59.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>80.0</td>\n",
       "      <td>63.0</td>\n",
       "      <td>63.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A     NaN   NaN     78.0\n",
       "B    25.0  81.0      NaN\n",
       "C    76.0   NaN     24.0\n",
       "D    70.0  39.0     80.0\n",
       "E    17.0  48.0     54.0\n",
       "F    42.0  45.0     36.0\n",
       "G     NaN  84.0     30.0\n",
       "H    41.0   0.0     58.0\n",
       "I    67.0  88.0     42.0\n",
       "J    71.0   4.0     38.0\n",
       "K    39.0  31.0     25.0\n",
       "L    85.0  60.0     40.0\n",
       "M    68.0  87.0     31.0\n",
       "N     3.0  53.0      NaN\n",
       "O    17.0  80.0     59.0\n",
       "P    80.0  59.0     53.0\n",
       "Q    48.0  72.0      6.0\n",
       "R    86.0  90.0     74.0\n",
       "S    44.0  59.0      3.0\n",
       "T    80.0  63.0     63.0"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(20,3)),\n",
    "                  index=list('ABCDEFGHIJKLMNOPQRST'),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "\n",
    "def convert(x):\n",
    "    return np.NaN if x > 90 else x\n",
    "    \n",
    "df['Python'] = df['Python'].map(convert)\n",
    "df['Math'] = df['Math'].map(convert)\n",
    "df['English'] = df['English'].map(convert)\n",
    "\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "id": "bdcf86af-ffd9-4298-b8fd-5e1fd7384394",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python\n",
       "17.0    2\n",
       "80.0    2\n",
       "25.0    1\n",
       "76.0    1\n",
       "70.0    1\n",
       "42.0    1\n",
       "41.0    1\n",
       "67.0    1\n",
       "71.0    1\n",
       "39.0    1\n",
       "85.0    1\n",
       "68.0    1\n",
       "3.0     1\n",
       "48.0    1\n",
       "86.0    1\n",
       "44.0    1\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 114,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#统计元素出现次数\n",
    "df['Python'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "id": "43504d77-0075-4395-b535-817682838746",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([nan, 25., 76., 70., 17., 42., 41., 67., 71., 39., 85., 68.,  3.,\n",
       "       80., 48., 86., 44.])"
      ]
     },
     "execution_count": 115,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#元素去重\n",
    "df['Python'].unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "id": "4dc8494e-1dd6-498b-9e39-abde50588a8f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>78.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>25.0</td>\n",
       "      <td>81.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>101.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>102.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>171.0</td>\n",
       "      <td>120.0</td>\n",
       "      <td>182.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>188.0</td>\n",
       "      <td>168.0</td>\n",
       "      <td>236.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>230.0</td>\n",
       "      <td>213.0</td>\n",
       "      <td>272.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>NaN</td>\n",
       "      <td>297.0</td>\n",
       "      <td>302.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>271.0</td>\n",
       "      <td>297.0</td>\n",
       "      <td>360.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>338.0</td>\n",
       "      <td>385.0</td>\n",
       "      <td>402.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>409.0</td>\n",
       "      <td>389.0</td>\n",
       "      <td>440.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>448.0</td>\n",
       "      <td>420.0</td>\n",
       "      <td>465.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>533.0</td>\n",
       "      <td>480.0</td>\n",
       "      <td>505.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>601.0</td>\n",
       "      <td>567.0</td>\n",
       "      <td>536.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>N</th>\n",
       "      <td>604.0</td>\n",
       "      <td>620.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>621.0</td>\n",
       "      <td>700.0</td>\n",
       "      <td>595.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>701.0</td>\n",
       "      <td>759.0</td>\n",
       "      <td>648.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>749.0</td>\n",
       "      <td>831.0</td>\n",
       "      <td>654.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>835.0</td>\n",
       "      <td>921.0</td>\n",
       "      <td>728.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>879.0</td>\n",
       "      <td>980.0</td>\n",
       "      <td>731.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>959.0</td>\n",
       "      <td>1043.0</td>\n",
       "      <td>794.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python    Math  English\n",
       "A     NaN     NaN     78.0\n",
       "B    25.0    81.0      NaN\n",
       "C   101.0     NaN    102.0\n",
       "D   171.0   120.0    182.0\n",
       "E   188.0   168.0    236.0\n",
       "F   230.0   213.0    272.0\n",
       "G     NaN   297.0    302.0\n",
       "H   271.0   297.0    360.0\n",
       "I   338.0   385.0    402.0\n",
       "J   409.0   389.0    440.0\n",
       "K   448.0   420.0    465.0\n",
       "L   533.0   480.0    505.0\n",
       "M   601.0   567.0    536.0\n",
       "N   604.0   620.0      NaN\n",
       "O   621.0   700.0    595.0\n",
       "P   701.0   759.0    648.0\n",
       "Q   749.0   831.0    654.0\n",
       "R   835.0   921.0    728.0\n",
       "S   879.0   980.0    731.0\n",
       "T   959.0  1043.0    794.0"
      ]
     },
     "execution_count": 116,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#累加\n",
    "df.cumsum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "id": "3d058a27-a833-44ee-bb77-fe4c78606f68",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7.800000e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>2.500000e+01</td>\n",
       "      <td>81.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>1.900000e+03</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.872000e+03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>1.330000e+05</td>\n",
       "      <td>3159.0</td>\n",
       "      <td>1.497600e+05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>2.261000e+06</td>\n",
       "      <td>151632.0</td>\n",
       "      <td>8.087040e+06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>9.496200e+07</td>\n",
       "      <td>6823440.0</td>\n",
       "      <td>2.911334e+08</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>NaN</td>\n",
       "      <td>573168960.0</td>\n",
       "      <td>8.734003e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>3.893442e+09</td>\n",
       "      <td>0.0</td>\n",
       "      <td>5.065722e+11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>2.608606e+11</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.127603e+13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>1.852110e+13</td>\n",
       "      <td>0.0</td>\n",
       "      <td>8.084892e+14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>7.223230e+14</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.021223e+16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>6.139746e+16</td>\n",
       "      <td>0.0</td>\n",
       "      <td>8.084892e+17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>4.175027e+18</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.506317e+19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>N</th>\n",
       "      <td>1.252508e+19</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>2.129264e+20</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.478727e+21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>1.703411e+22</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.837252e+22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>8.176373e+23</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.702351e+23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>7.031681e+25</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3.479740e+25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>3.093940e+27</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.043922e+26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>2.475152e+29</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.576708e+27</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         Python         Math       English\n",
       "A           NaN          NaN  7.800000e+01\n",
       "B  2.500000e+01         81.0           NaN\n",
       "C  1.900000e+03          NaN  1.872000e+03\n",
       "D  1.330000e+05       3159.0  1.497600e+05\n",
       "E  2.261000e+06     151632.0  8.087040e+06\n",
       "F  9.496200e+07    6823440.0  2.911334e+08\n",
       "G           NaN  573168960.0  8.734003e+09\n",
       "H  3.893442e+09          0.0  5.065722e+11\n",
       "I  2.608606e+11          0.0  2.127603e+13\n",
       "J  1.852110e+13          0.0  8.084892e+14\n",
       "K  7.223230e+14          0.0  2.021223e+16\n",
       "L  6.139746e+16          0.0  8.084892e+17\n",
       "M  4.175027e+18          0.0  2.506317e+19\n",
       "N  1.252508e+19          0.0           NaN\n",
       "O  2.129264e+20          0.0  1.478727e+21\n",
       "P  1.703411e+22          0.0  7.837252e+22\n",
       "Q  8.176373e+23          0.0  4.702351e+23\n",
       "R  7.031681e+25          0.0  3.479740e+25\n",
       "S  3.093940e+27          0.0  1.043922e+26\n",
       "T  2.475152e+29          0.0  6.576708e+27"
      ]
     },
     "execution_count": 117,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#累乘\n",
    "df.cumprod()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "id": "bf7a932c-75f4-4b82-befe-dc7244e341c6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     26.094411\n",
       "Math       26.947601\n",
       "English    22.603719\n",
       "dtype: float64"
      ]
     },
     "execution_count": 118,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#标准差\n",
    "df.std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "id": "e378020f-64a5-4353-a1b8-136dba825d8d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     680.918301\n",
       "Math       726.173203\n",
       "English    510.928105\n",
       "dtype: float64"
      ]
     },
     "execution_count": 119,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#方差\n",
    "df.var()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "id": "538e5f08-61ce-4e92-b34c-dc09be743ebe",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>78.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>25.0</td>\n",
       "      <td>81.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>25.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>25.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>17.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>17.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>NaN</td>\n",
       "      <td>39.0</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>17.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>17.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>17.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>17.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>17.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>17.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>N</th>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A     NaN   NaN     78.0\n",
       "B    25.0  81.0      NaN\n",
       "C    25.0   NaN     24.0\n",
       "D    25.0  39.0     24.0\n",
       "E    17.0  39.0     24.0\n",
       "F    17.0  39.0     24.0\n",
       "G     NaN  39.0     24.0\n",
       "H    17.0   0.0     24.0\n",
       "I    17.0   0.0     24.0\n",
       "J    17.0   0.0     24.0\n",
       "K    17.0   0.0     24.0\n",
       "L    17.0   0.0     24.0\n",
       "M    17.0   0.0     24.0\n",
       "N     3.0   0.0      NaN\n",
       "O     3.0   0.0     24.0\n",
       "P     3.0   0.0     24.0\n",
       "Q     3.0   0.0      6.0\n",
       "R     3.0   0.0      6.0\n",
       "S     3.0   0.0      3.0\n",
       "T     3.0   0.0      3.0"
      ]
     },
     "execution_count": 120,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#累计最小值\n",
    "df.cummin()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "id": "e719ecb9-bebf-4b11-86b9-4aa481f2d267",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>78.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>25.0</td>\n",
       "      <td>81.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>76.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>78.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>76.0</td>\n",
       "      <td>81.0</td>\n",
       "      <td>80.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>76.0</td>\n",
       "      <td>81.0</td>\n",
       "      <td>80.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>76.0</td>\n",
       "      <td>81.0</td>\n",
       "      <td>80.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>NaN</td>\n",
       "      <td>84.0</td>\n",
       "      <td>80.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>76.0</td>\n",
       "      <td>84.0</td>\n",
       "      <td>80.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>76.0</td>\n",
       "      <td>88.0</td>\n",
       "      <td>80.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>76.0</td>\n",
       "      <td>88.0</td>\n",
       "      <td>80.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>76.0</td>\n",
       "      <td>88.0</td>\n",
       "      <td>80.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>85.0</td>\n",
       "      <td>88.0</td>\n",
       "      <td>80.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>85.0</td>\n",
       "      <td>88.0</td>\n",
       "      <td>80.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>N</th>\n",
       "      <td>85.0</td>\n",
       "      <td>88.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>85.0</td>\n",
       "      <td>88.0</td>\n",
       "      <td>80.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>85.0</td>\n",
       "      <td>88.0</td>\n",
       "      <td>80.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>85.0</td>\n",
       "      <td>88.0</td>\n",
       "      <td>80.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>86.0</td>\n",
       "      <td>90.0</td>\n",
       "      <td>80.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>86.0</td>\n",
       "      <td>90.0</td>\n",
       "      <td>80.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>86.0</td>\n",
       "      <td>90.0</td>\n",
       "      <td>80.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A     NaN   NaN     78.0\n",
       "B    25.0  81.0      NaN\n",
       "C    76.0   NaN     78.0\n",
       "D    76.0  81.0     80.0\n",
       "E    76.0  81.0     80.0\n",
       "F    76.0  81.0     80.0\n",
       "G     NaN  84.0     80.0\n",
       "H    76.0  84.0     80.0\n",
       "I    76.0  88.0     80.0\n",
       "J    76.0  88.0     80.0\n",
       "K    76.0  88.0     80.0\n",
       "L    85.0  88.0     80.0\n",
       "M    85.0  88.0     80.0\n",
       "N    85.0  88.0      NaN\n",
       "O    85.0  88.0     80.0\n",
       "P    85.0  88.0     80.0\n",
       "Q    85.0  88.0     80.0\n",
       "R    86.0  90.0     80.0\n",
       "S    86.0  90.0     80.0\n",
       "T    86.0  90.0     80.0"
      ]
     },
     "execution_count": 121,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#累计最大值\n",
    "df.cummax()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "id": "de401fc8-5c61-4587-9a21-eb7979733e65",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>51.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>-6.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>56.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>-53.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>-26.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>25.0</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>-18.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>NaN</td>\n",
       "      <td>39.0</td>\n",
       "      <td>-6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>NaN</td>\n",
       "      <td>-84.0</td>\n",
       "      <td>28.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>26.0</td>\n",
       "      <td>88.0</td>\n",
       "      <td>-16.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>4.0</td>\n",
       "      <td>-84.0</td>\n",
       "      <td>-4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>-32.0</td>\n",
       "      <td>27.0</td>\n",
       "      <td>-13.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>46.0</td>\n",
       "      <td>29.0</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>-17.0</td>\n",
       "      <td>27.0</td>\n",
       "      <td>-9.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>N</th>\n",
       "      <td>-65.0</td>\n",
       "      <td>-34.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>14.0</td>\n",
       "      <td>27.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>63.0</td>\n",
       "      <td>-21.0</td>\n",
       "      <td>-6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>-32.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>-47.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>38.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>68.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>-42.0</td>\n",
       "      <td>-31.0</td>\n",
       "      <td>-71.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>36.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>60.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A     NaN   NaN      NaN\n",
       "B     NaN   NaN      NaN\n",
       "C    51.0   NaN      NaN\n",
       "D    -6.0   NaN     56.0\n",
       "E   -53.0   9.0    -26.0\n",
       "F    25.0  -3.0    -18.0\n",
       "G     NaN  39.0     -6.0\n",
       "H     NaN -84.0     28.0\n",
       "I    26.0  88.0    -16.0\n",
       "J     4.0 -84.0     -4.0\n",
       "K   -32.0  27.0    -13.0\n",
       "L    46.0  29.0     15.0\n",
       "M   -17.0  27.0     -9.0\n",
       "N   -65.0 -34.0      NaN\n",
       "O    14.0  27.0      NaN\n",
       "P    63.0 -21.0     -6.0\n",
       "Q   -32.0  13.0    -47.0\n",
       "R    38.0  18.0     68.0\n",
       "S   -42.0 -31.0    -71.0\n",
       "T    36.0   4.0     60.0"
      ]
     },
     "execution_count": 122,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#计算差分\n",
    "df.diff()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "id": "6e016f54-941a-4a9d-b598-091f7d56886c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>2.040000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>-0.078947</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>-0.757143</td>\n",
       "      <td>0.230769</td>\n",
       "      <td>-0.325000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>1.470588</td>\n",
       "      <td>-0.062500</td>\n",
       "      <td>-0.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.866667</td>\n",
       "      <td>-0.166667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>NaN</td>\n",
       "      <td>-1.000000</td>\n",
       "      <td>0.933333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>0.634146</td>\n",
       "      <td>inf</td>\n",
       "      <td>-0.275862</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>0.059701</td>\n",
       "      <td>-0.954545</td>\n",
       "      <td>-0.095238</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>-0.450704</td>\n",
       "      <td>6.750000</td>\n",
       "      <td>-0.342105</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>1.179487</td>\n",
       "      <td>0.935484</td>\n",
       "      <td>0.600000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>-0.200000</td>\n",
       "      <td>0.450000</td>\n",
       "      <td>-0.225000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>N</th>\n",
       "      <td>-0.955882</td>\n",
       "      <td>-0.390805</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>4.666667</td>\n",
       "      <td>0.509434</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>3.705882</td>\n",
       "      <td>-0.262500</td>\n",
       "      <td>-0.101695</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>-0.400000</td>\n",
       "      <td>0.220339</td>\n",
       "      <td>-0.886792</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>0.791667</td>\n",
       "      <td>0.250000</td>\n",
       "      <td>11.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>-0.488372</td>\n",
       "      <td>-0.344444</td>\n",
       "      <td>-0.959459</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>0.818182</td>\n",
       "      <td>0.067797</td>\n",
       "      <td>20.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     Python      Math    English\n",
       "A       NaN       NaN        NaN\n",
       "B       NaN       NaN        NaN\n",
       "C  2.040000       NaN        NaN\n",
       "D -0.078947       NaN   2.333333\n",
       "E -0.757143  0.230769  -0.325000\n",
       "F  1.470588 -0.062500  -0.333333\n",
       "G       NaN  0.866667  -0.166667\n",
       "H       NaN -1.000000   0.933333\n",
       "I  0.634146       inf  -0.275862\n",
       "J  0.059701 -0.954545  -0.095238\n",
       "K -0.450704  6.750000  -0.342105\n",
       "L  1.179487  0.935484   0.600000\n",
       "M -0.200000  0.450000  -0.225000\n",
       "N -0.955882 -0.390805        NaN\n",
       "O  4.666667  0.509434        NaN\n",
       "P  3.705882 -0.262500  -0.101695\n",
       "Q -0.400000  0.220339  -0.886792\n",
       "R  0.791667  0.250000  11.333333\n",
       "S -0.488372 -0.344444  -0.959459\n",
       "T  0.818182  0.067797  20.000000"
      ]
     },
     "execution_count": 123,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#计算百分比变化\n",
    "df.pct_change(fill_method=None)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "78ccd793-4ae9-4f51-b618-a41ab0337e56",
   "metadata": {},
   "source": [
    "### 高级统计指标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "id": "0c6a6b3b-2fc7-4a5c-8e07-c914965c483d",
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(20,3)),\n",
    "                  index=list('ABCDEFGHIJKLMNOPQRST'),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "\n",
    "def convert(x):\n",
    "    return np.NaN if x > 90 else x\n",
    "    \n",
    "df['Python'] = df['Python'].map(convert)\n",
    "df['Math'] = df['Math'].map(convert)\n",
    "df['English'] = df['English'].map(convert)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "id": "c755e1ad-6158-4d2e-abfe-58dd5390782c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Python</th>\n",
       "      <td>648.989474</td>\n",
       "      <td>115.250</td>\n",
       "      <td>107.242105</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Math</th>\n",
       "      <td>115.250000</td>\n",
       "      <td>811.125</td>\n",
       "      <td>50.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>107.242105</td>\n",
       "      <td>50.500</td>\n",
       "      <td>363.523684</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             Python     Math     English\n",
       "Python   648.989474  115.250  107.242105\n",
       "Math     115.250000  811.125   50.500000\n",
       "English  107.242105   50.500  363.523684"
      ]
     },
     "execution_count": 125,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#协方差\n",
    "df.cov()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "id": "e9c6dc68-a003-4a9e-a67e-38723ff9260c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "107.24210526315788"
      ]
     },
     "execution_count": 126,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#两列的协方差\n",
    "df['Python'].cov(df['English'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "id": "3ff6b73e-a660-4025-8824-90ba26d8922c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Python</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.162535</td>\n",
       "      <td>0.220790</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Math</th>\n",
       "      <td>0.162535</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.092525</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>0.220790</td>\n",
       "      <td>0.092525</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           Python      Math   English\n",
       "Python   1.000000  0.162535  0.220790\n",
       "Math     0.162535  1.000000  0.092525\n",
       "English  0.220790  0.092525  1.000000"
      ]
     },
     "execution_count": 127,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#相关性系数\n",
    "df.corr()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "id": "c08cc74b-8fdf-4be3-98df-40fc68beca94",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     0.220790\n",
       "Math       0.092525\n",
       "English    1.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 128,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#单一属性相关性系数\n",
    "df.corrwith(df['English'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b0a67e3-2f91-471b-ab49-a7152295f0e6",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 数据排序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "id": "04470d5a-6d64-4c00-85ab-b97895002fca",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>q</th>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>w</th>\n",
       "      <td>7</td>\n",
       "      <td>14</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>e</th>\n",
       "      <td>25</td>\n",
       "      <td>16</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>r</th>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t</th>\n",
       "      <td>1</td>\n",
       "      <td>24</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "q       2     6       11\n",
       "w       7    14       13\n",
       "e      25    16       21\n",
       "r      15     0       21\n",
       "t       1    24       15"
      ]
     },
     "execution_count": 129,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 30, size=(30, 3)),\n",
    "                  index=list('qwertyuioijhgfcasdcvbnerfghjcf'),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "id": "0e40f6d3-ab6c-436f-8085-83cd9f90ee0d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>a</th>\n",
       "      <td>28</td>\n",
       "      <td>11</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>b</th>\n",
       "      <td>29</td>\n",
       "      <td>1</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>22</td>\n",
       "      <td>0</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "a      28    11       20\n",
       "b      29     1       16\n",
       "c      10     1       27\n",
       "c       9     3       14\n",
       "c      22     0       14"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>English</th>\n",
       "      <th>Math</th>\n",
       "      <th>Python</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>q</th>\n",
       "      <td>11</td>\n",
       "      <td>6</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>w</th>\n",
       "      <td>13</td>\n",
       "      <td>14</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>e</th>\n",
       "      <td>21</td>\n",
       "      <td>16</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>r</th>\n",
       "      <td>21</td>\n",
       "      <td>0</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t</th>\n",
       "      <td>15</td>\n",
       "      <td>24</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   English  Math  Python\n",
       "q       11     6       2\n",
       "w       13    14       7\n",
       "e       21    16      25\n",
       "r       21     0      15\n",
       "t       15    24       1"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#根据索引名排序\n",
    "#1.根据索引排序，默认按照 行索引标签 排序\n",
    "d1 = df.sort_index(axis=0, ascending=True).head()\n",
    "display(d1)\n",
    "#2.按照 列索引标签 排序各列\n",
    "d2 = df.sort_index(axis=1, ascending=True).head()\n",
    "display(d2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "id": "1a0ccd23-79d2-4b80-9bfd-f29159527622",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>t</th>\n",
       "      <td>1</td>\n",
       "      <td>24</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>q</th>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f</th>\n",
       "      <td>3</td>\n",
       "      <td>14</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>e</th>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>g</th>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>u</th>\n",
       "      <td>7</td>\n",
       "      <td>15</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>v</th>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>w</th>\n",
       "      <td>7</td>\n",
       "      <td>14</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>s</th>\n",
       "      <td>9</td>\n",
       "      <td>14</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>d</th>\n",
       "      <td>11</td>\n",
       "      <td>8</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>g</th>\n",
       "      <td>12</td>\n",
       "      <td>19</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>r</th>\n",
       "      <td>13</td>\n",
       "      <td>22</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f</th>\n",
       "      <td>13</td>\n",
       "      <td>7</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>j</th>\n",
       "      <td>14</td>\n",
       "      <td>20</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>r</th>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>h</th>\n",
       "      <td>17</td>\n",
       "      <td>11</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>i</th>\n",
       "      <td>18</td>\n",
       "      <td>15</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>n</th>\n",
       "      <td>18</td>\n",
       "      <td>16</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>j</th>\n",
       "      <td>19</td>\n",
       "      <td>8</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>y</th>\n",
       "      <td>20</td>\n",
       "      <td>9</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>h</th>\n",
       "      <td>21</td>\n",
       "      <td>16</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>22</td>\n",
       "      <td>0</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>i</th>\n",
       "      <td>24</td>\n",
       "      <td>11</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>e</th>\n",
       "      <td>25</td>\n",
       "      <td>16</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>a</th>\n",
       "      <td>28</td>\n",
       "      <td>11</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>o</th>\n",
       "      <td>28</td>\n",
       "      <td>20</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>b</th>\n",
       "      <td>29</td>\n",
       "      <td>1</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "t       1    24       15\n",
       "q       2     6       11\n",
       "f       2     3       25\n",
       "f       3    14       16\n",
       "e       4     7        0\n",
       "g       5     6       12\n",
       "u       7    15       24\n",
       "v       7     0        2\n",
       "w       7    14       13\n",
       "s       9    14       11\n",
       "c       9     3       14\n",
       "c      10     1       27\n",
       "d      11     8       17\n",
       "g      12    19       29\n",
       "r      13    22       21\n",
       "f      13     7       21\n",
       "j      14    20       23\n",
       "r      15     0       21\n",
       "h      17    11       13\n",
       "i      18    15       18\n",
       "n      18    16       28\n",
       "j      19     8       14\n",
       "y      20     9       28\n",
       "h      21    16       27\n",
       "c      22     0       14\n",
       "i      24    11       14\n",
       "e      25    16       21\n",
       "a      28    11       20\n",
       "o      28    20        2\n",
       "b      29     1       16"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>t</th>\n",
       "      <td>1</td>\n",
       "      <td>24</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>q</th>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f</th>\n",
       "      <td>3</td>\n",
       "      <td>14</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>e</th>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>g</th>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>v</th>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>w</th>\n",
       "      <td>7</td>\n",
       "      <td>14</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>u</th>\n",
       "      <td>7</td>\n",
       "      <td>15</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>s</th>\n",
       "      <td>9</td>\n",
       "      <td>14</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>d</th>\n",
       "      <td>11</td>\n",
       "      <td>8</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>g</th>\n",
       "      <td>12</td>\n",
       "      <td>19</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f</th>\n",
       "      <td>13</td>\n",
       "      <td>7</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>r</th>\n",
       "      <td>13</td>\n",
       "      <td>22</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>j</th>\n",
       "      <td>14</td>\n",
       "      <td>20</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>r</th>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>h</th>\n",
       "      <td>17</td>\n",
       "      <td>11</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>i</th>\n",
       "      <td>18</td>\n",
       "      <td>15</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>n</th>\n",
       "      <td>18</td>\n",
       "      <td>16</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>j</th>\n",
       "      <td>19</td>\n",
       "      <td>8</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>y</th>\n",
       "      <td>20</td>\n",
       "      <td>9</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>h</th>\n",
       "      <td>21</td>\n",
       "      <td>16</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>22</td>\n",
       "      <td>0</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>i</th>\n",
       "      <td>24</td>\n",
       "      <td>11</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>e</th>\n",
       "      <td>25</td>\n",
       "      <td>16</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>a</th>\n",
       "      <td>28</td>\n",
       "      <td>11</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>o</th>\n",
       "      <td>28</td>\n",
       "      <td>20</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>b</th>\n",
       "      <td>29</td>\n",
       "      <td>1</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "t       1    24       15\n",
       "f       2     3       25\n",
       "q       2     6       11\n",
       "f       3    14       16\n",
       "e       4     7        0\n",
       "g       5     6       12\n",
       "v       7     0        2\n",
       "w       7    14       13\n",
       "u       7    15       24\n",
       "c       9     3       14\n",
       "s       9    14       11\n",
       "c      10     1       27\n",
       "d      11     8       17\n",
       "g      12    19       29\n",
       "f      13     7       21\n",
       "r      13    22       21\n",
       "j      14    20       23\n",
       "r      15     0       21\n",
       "h      17    11       13\n",
       "i      18    15       18\n",
       "n      18    16       28\n",
       "j      19     8       14\n",
       "y      20     9       28\n",
       "h      21    16       27\n",
       "c      22     0       14\n",
       "i      24    11       14\n",
       "e      25    16       21\n",
       "a      28    11       20\n",
       "o      28    20        2\n",
       "b      29     1       16"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#根据属性值排序\n",
    "#1.根据某一列排序\n",
    "d1 = df.sort_values(by = 'Python')\n",
    "display(d1)\n",
    "#2.根据多列排序\n",
    "d2 = df.sort_values(by = ['Python', 'Math'])\n",
    "display(d2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3a40d1ce-01ae-4781-b754-305f8f894b61",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 分箱操作"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "id": "89520168-d3f0-45b8-9db3-7650696ee980",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>38</td>\n",
       "      <td>84</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>37</td>\n",
       "      <td>35</td>\n",
       "      <td>143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>27</td>\n",
       "      <td>88</td>\n",
       "      <td>138</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>44</td>\n",
       "      <td>142</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>115</td>\n",
       "      <td>98</td>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>64</td>\n",
       "      <td>1</td>\n",
       "      <td>138</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>95</td>\n",
       "      <td>49</td>\n",
       "      <td>109</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>15</td>\n",
       "      <td>47</td>\n",
       "      <td>61</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>90</td>\n",
       "      <td>19</td>\n",
       "      <td>105</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>73</td>\n",
       "      <td>24</td>\n",
       "      <td>111</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    Python  Tensorflow  Keras\n",
       "0       38          84      5\n",
       "1       37          35    143\n",
       "2       27          88    138\n",
       "3        3          44    142\n",
       "4      115          98     26\n",
       "..     ...         ...    ...\n",
       "95      64           1    138\n",
       "96      95          49    109\n",
       "97      15          47     61\n",
       "98      90          19    105\n",
       "99      73          24    111\n",
       "\n",
       "[100 rows x 3 columns]"
      ]
     },
     "execution_count": 132,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(data = np.random.randint(0,151,size = (100,3)),\n",
    "                  columns=['Python','Tensorflow','Keras'])\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "id": "0dd51542-1bfa-43cb-9f27-771afbe12aeb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0      (-0.15, 50.0]\n",
       "1      (-0.15, 50.0]\n",
       "2      (-0.15, 50.0]\n",
       "3      (-0.15, 50.0]\n",
       "4     (100.0, 150.0]\n",
       "           ...      \n",
       "95     (50.0, 100.0]\n",
       "96     (50.0, 100.0]\n",
       "97     (-0.15, 50.0]\n",
       "98     (50.0, 100.0]\n",
       "99     (50.0, 100.0]\n",
       "Name: Python, Length: 100, dtype: category\n",
       "Categories (3, interval[float64, right]): [(-0.15, 50.0] < (50.0, 100.0] < (100.0, 150.0]]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-------\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Python\n",
       "(-0.15, 50.0]     37\n",
       "(50.0, 100.0]     36\n",
       "(100.0, 150.0]    27\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 133,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 1、等宽分箱\n",
    "t = pd.cut(df.Python, bins = 3) # 分为三段，每段长度约为 50\n",
    "display(t)\n",
    "print('-------')\n",
    "t.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "id": "dda63f18-fd87-497b-aa70-d23a003b69fc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0     不及格\n",
       "1      优秀\n",
       "2      优秀\n",
       "3      优秀\n",
       "4     不及格\n",
       "     ... \n",
       "95     优秀\n",
       "96     良好\n",
       "97     中等\n",
       "98     良好\n",
       "99     良好\n",
       "Name: Keras, Length: 100, dtype: category\n",
       "Categories (4, object): ['不及格' < '中等' < '良好' < '优秀']"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-------\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Keras\n",
       "不及格    36\n",
       "优秀     25\n",
       "良好     22\n",
       "中等     17\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 134,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 指定宽度分箱\n",
    "t = pd.cut(df.Keras,#分箱数据\n",
    "       bins = [0,60,90,120,150],#分箱断点\n",
    "       right = False,# includes the rightmost edge or not\n",
    "       labels=['不及格','中等','良好','优秀'])# 分箱后分类\n",
    "display(t)\n",
    "print('-------')\n",
    "t.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "id": "e1347bd1-4fcc-45d5-9530-d6c908f87a4b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0     中\n",
       "1     中\n",
       "2     差\n",
       "3     差\n",
       "4     优\n",
       "     ..\n",
       "95    中\n",
       "96    良\n",
       "97    差\n",
       "98    良\n",
       "99    良\n",
       "Name: Python, Length: 100, dtype: category\n",
       "Categories (4, object): ['差' < '中' < '良' < '优']"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-------\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Python\n",
       "中    26\n",
       "差    25\n",
       "优    25\n",
       "良    24\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 135,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 2、等频分箱\n",
    "t = pd.qcut(df.Python,\n",
    "        q = 4,# 4等分\n",
    "        labels=['差','中','良','优']) # 分箱后分类\n",
    "display(t)\n",
    "print('-------')\n",
    "t.value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "25591d50-ee49-4a40-9faa-6afc7c7ebe0a",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 分组聚合"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1cc8e3fd-3ca0-4f1d-b04b-8505252a497f",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "### 分组"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "id": "e11bd259-4cca-4f9e-93ad-0cbd6c0a8411",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th>Python</th>\n",
       "      <th>Keras</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Java</th>\n",
       "      <th>C++</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>famale</td>\n",
       "      <td>2</td>\n",
       "      <td>60</td>\n",
       "      <td>14</td>\n",
       "      <td>119</td>\n",
       "      <td>133</td>\n",
       "      <td>106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>famale</td>\n",
       "      <td>3</td>\n",
       "      <td>14</td>\n",
       "      <td>36</td>\n",
       "      <td>68</td>\n",
       "      <td>115</td>\n",
       "      <td>64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>famale</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>51</td>\n",
       "      <td>84</td>\n",
       "      <td>98</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>male</td>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>100</td>\n",
       "      <td>118</td>\n",
       "      <td>99</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>famale</td>\n",
       "      <td>6</td>\n",
       "      <td>108</td>\n",
       "      <td>107</td>\n",
       "      <td>37</td>\n",
       "      <td>129</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      sex  class  Python  Keras  Tensorflow  Java  C++\n",
       "0  famale      2      60     14         119   133  106\n",
       "1  famale      3      14     36          68   115   64\n",
       "2  famale      1       5     51          84    98   11\n",
       "3    male      4       8    100         118    99   60\n",
       "4  famale      6     108    107          37   129   28"
      ]
     },
     "execution_count": 136,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\n",
    "    'sex': np.random.randint(0, 2, size=300),#0famale, 1male\n",
    "    'class': np.random.randint(1, 9, size=300),#Class No.1~8\n",
    "    'Python': np.random.randint(0, 151, size=300),\n",
    "    'Keras': np.random.randint(0, 151, size=300),\n",
    "    'Tensorflow': np.random.randint(0, 151, size=300),\n",
    "    'Java': np.random.randint(0, 151, size=300),\n",
    "    'C++': np.random.randint(0, 151, size=300),\n",
    "})\n",
    "\n",
    "df['sex'] = df['sex'].map({0:'famale', 1:'male'})\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "id": "440b7841-4172-44a9-9a43-c5b6823e402b",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "famale\n",
      "     Python  Java\n",
      "0        60   133\n",
      "1        14   115\n",
      "2         5    98\n",
      "4       108   129\n",
      "6        62   146\n",
      "..      ...   ...\n",
      "291      85   149\n",
      "293     109    35\n",
      "294      97    17\n",
      "296      41    20\n",
      "298      82    59\n",
      "\n",
      "[155 rows x 2 columns]\n",
      "---\n",
      "male\n",
      "     Python  Java\n",
      "3         8    99\n",
      "5        53    21\n",
      "7        60    41\n",
      "12      129    76\n",
      "13      104    24\n",
      "..      ...   ...\n",
      "289      84   118\n",
      "292      53    82\n",
      "295      93   106\n",
      "297     143     5\n",
      "299      45   143\n",
      "\n",
      "[145 rows x 2 columns]\n",
      "---\n"
     ]
    }
   ],
   "source": [
    "# 1.先分组、再选择列\n",
    "g = df.groupby(by = 'sex')[['Python', 'Java']]\n",
    "\n",
    "def printg(g):\n",
    "    i = 0\n",
    "    for name,data in g:\n",
    "        if i > 2:\n",
    "            print('数据太多...省略一万字...')\n",
    "            return\n",
    "        print(name)\n",
    "        print(data)\n",
    "        print('---')\n",
    "        i += 1\n",
    "\n",
    "printg(g)\n",
    "\n",
    "#多分组：对多个列进行分组\n",
    "#g = df.groupby(by = ['class', 'sex'])[['Python']]\n",
    "#printg(g)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "id": "481a16c9-f447-4682-9ea4-3fdf0a7f17ca",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1\n",
      "2        5\n",
      "16      28\n",
      "22      15\n",
      "31      73\n",
      "44     145\n",
      "58      78\n",
      "69      32\n",
      "71      21\n",
      "77       4\n",
      "81       7\n",
      "82      77\n",
      "87      81\n",
      "88      72\n",
      "94     122\n",
      "95     129\n",
      "100     53\n",
      "131     44\n",
      "136     88\n",
      "144     13\n",
      "160     41\n",
      "162     34\n",
      "171     58\n",
      "176     12\n",
      "178    109\n",
      "185    103\n",
      "194    120\n",
      "201     68\n",
      "210     69\n",
      "220     63\n",
      "225    117\n",
      "227    101\n",
      "229     53\n",
      "234     18\n",
      "253      7\n",
      "254     77\n",
      "261    145\n",
      "263     16\n",
      "266    149\n",
      "277    107\n",
      "Name: Python, dtype: int64\n",
      "---\n",
      "2\n",
      "0       60\n",
      "6       62\n",
      "9       10\n",
      "13     104\n",
      "17      46\n",
      "38     101\n",
      "66      54\n",
      "84      83\n",
      "110     92\n",
      "117    126\n",
      "128    118\n",
      "130     70\n",
      "137    134\n",
      "145    104\n",
      "147     98\n",
      "154      7\n",
      "157     96\n",
      "191     27\n",
      "195    112\n",
      "200      1\n",
      "202     33\n",
      "238    103\n",
      "246      7\n",
      "273     12\n",
      "284     55\n",
      "290     56\n",
      "294     97\n",
      "Name: Python, dtype: int64\n",
      "---\n",
      "3\n",
      "1       14\n",
      "5       53\n",
      "10      15\n",
      "11      78\n",
      "19      78\n",
      "26       1\n",
      "40     140\n",
      "48     107\n",
      "49      43\n",
      "52      46\n",
      "55      95\n",
      "73     105\n",
      "76      63\n",
      "80      24\n",
      "105    143\n",
      "111     14\n",
      "114     95\n",
      "118     43\n",
      "125     81\n",
      "126    137\n",
      "134     38\n",
      "168    104\n",
      "174     83\n",
      "181    122\n",
      "204    117\n",
      "205     81\n",
      "212      0\n",
      "214    145\n",
      "215     35\n",
      "218    119\n",
      "221    135\n",
      "230     72\n",
      "237     76\n",
      "244     76\n",
      "249     38\n",
      "250     73\n",
      "252    144\n",
      "258     28\n",
      "274     93\n",
      "278    149\n",
      "280     67\n",
      "285    120\n",
      "Name: Python, dtype: int64\n",
      "---\n",
      "数据太多...省略一万字...\n"
     ]
    }
   ],
   "source": [
    "# 2、对一列值进行分组\n",
    "g = df['Python'].groupby(df['class'])\n",
    "printg(g)\n",
    "#等价写法？\n",
    "# printg(df.groupby(by = 'class')[['Python']])\n",
    "\n",
    "#多分组\n",
    "# printg(df['Keras'].groupby([df['class'], df['sex']]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "id": "acdc07d7-7bcc-400f-bdee-d68c28fe28f8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "int64\n",
      "     class  Python  Keras  Tensorflow  Java  C++\n",
      "0        2      60     14         119   133  106\n",
      "1        3      14     36          68   115   64\n",
      "2        1       5     51          84    98   11\n",
      "3        4       8    100         118    99   60\n",
      "4        6     108    107          37   129   28\n",
      "..     ...     ...    ...         ...   ...  ...\n",
      "295      7      93    140          97   106   35\n",
      "296      7      41    104         148    20   40\n",
      "297      5     143    110          28     5   22\n",
      "298      7      82     21          48    59    5\n",
      "299      4      45     48         118   143  146\n",
      "\n",
      "[300 rows x 6 columns]\n",
      "---\n",
      "object\n",
      "        sex\n",
      "0    famale\n",
      "1    famale\n",
      "2    famale\n",
      "3      male\n",
      "4    famale\n",
      "..      ...\n",
      "295    male\n",
      "296  famale\n",
      "297    male\n",
      "298  famale\n",
      "299    male\n",
      "\n",
      "[300 rows x 1 columns]\n",
      "---\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/tmp/ipykernel_3916/58823927.py:2: FutureWarning: DataFrame.groupby with axis=1 is deprecated. Do `frame.T.groupby(...)` without axis instead.\n",
      "  printg(df.groupby(df.dtypes, axis=1))\n"
     ]
    }
   ],
   "source": [
    "# 3、按数据类型分组\n",
    "printg(df.groupby(df.dtypes, axis=1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "id": "ac0df875-fa21-4d0c-a831-01c74edddf9f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "IT\n",
      "     Keras  Tensorflow  Java  C++\n",
      "0       14         119   133  106\n",
      "1       36          68   115   64\n",
      "2       51          84    98   11\n",
      "3      100         118    99   60\n",
      "4      107          37   129   28\n",
      "..     ...         ...   ...  ...\n",
      "295    140          97   106   35\n",
      "296    104         148    20   40\n",
      "297    110          28     5   22\n",
      "298     21          48    59    5\n",
      "299     48         118   143  146\n",
      "\n",
      "[300 rows x 4 columns]\n",
      "---\n",
      "category\n",
      "        sex  class\n",
      "0    famale      2\n",
      "1    famale      3\n",
      "2    famale      1\n",
      "3      male      4\n",
      "4    famale      6\n",
      "..      ...    ...\n",
      "295    male      7\n",
      "296  famale      7\n",
      "297    male      5\n",
      "298  famale      7\n",
      "299    male      4\n",
      "\n",
      "[300 rows x 2 columns]\n",
      "---\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/tmp/ipykernel_3916/2953024773.py:11: FutureWarning: DataFrame.groupby with axis=1 is deprecated. Do `frame.T.groupby(...)` without axis instead.\n",
      "  printg(df.groupby(m, axis=1))\n"
     ]
    }
   ],
   "source": [
    "# 4、通过字典进行分组\n",
    "m = {\n",
    "    'sex': 'category',\n",
    "    'class': 'category',\n",
    "    'Pytorch': 'IT',\n",
    "    'Keras': 'IT',\n",
    "    'Tensorflow': 'IT',\n",
    "    'Java': 'IT',\n",
    "    'C++': 'IT'\n",
    "}\n",
    "printg(df.groupby(m, axis=1))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "681c5c10-e0fc-44ba-9a35-c71d6d55ea20",
   "metadata": {},
   "source": [
    "### 分组聚合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "id": "8b0ac55b-3cd9-4e11-8730-4745cb331d30",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th>Python</th>\n",
       "      <th>Keras</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Java</th>\n",
       "      <th>C++</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>famale</td>\n",
       "      <td>3</td>\n",
       "      <td>7</td>\n",
       "      <td>79</td>\n",
       "      <td>56</td>\n",
       "      <td>93</td>\n",
       "      <td>41</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>famale</td>\n",
       "      <td>8</td>\n",
       "      <td>130</td>\n",
       "      <td>13</td>\n",
       "      <td>141</td>\n",
       "      <td>90</td>\n",
       "      <td>96</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>male</td>\n",
       "      <td>7</td>\n",
       "      <td>101</td>\n",
       "      <td>108</td>\n",
       "      <td>118</td>\n",
       "      <td>81</td>\n",
       "      <td>83</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>male</td>\n",
       "      <td>6</td>\n",
       "      <td>58</td>\n",
       "      <td>99</td>\n",
       "      <td>141</td>\n",
       "      <td>69</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>male</td>\n",
       "      <td>3</td>\n",
       "      <td>58</td>\n",
       "      <td>109</td>\n",
       "      <td>98</td>\n",
       "      <td>14</td>\n",
       "      <td>47</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      sex  class  Python  Keras  Tensorflow  Java  C++\n",
       "0  famale      3       7     79          56    93   41\n",
       "1  famale      8     130     13         141    90   96\n",
       "2    male      7     101    108         118    81   83\n",
       "3    male      6      58     99         141    69    8\n",
       "4    male      3      58    109          98    14   47"
      ]
     },
     "execution_count": 141,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\n",
    "    'sex': np.random.randint(0, 2, size=300),#0famale, 1male\n",
    "    'class': np.random.randint(1, 9, size=300),#Class No.1~8\n",
    "    'Python': np.random.randint(0, 151, size=300),\n",
    "    'Keras': np.random.randint(0, 151, size=300),\n",
    "    'Tensorflow': np.random.randint(0, 151, size=300),\n",
    "    'Java': np.random.randint(0, 151, size=300),\n",
    "    'C++': np.random.randint(0, 151, size=300),\n",
    "})\n",
    "\n",
    "df['sex'] = df['sex'].map({0:'famale', 1:'male'})\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "id": "680edf88-7bcd-4c89-a327-c0d72c1d7cdd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>class</th>\n",
       "      <th>Python</th>\n",
       "      <th>Keras</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Java</th>\n",
       "      <th>C++</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sex</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>famale</th>\n",
       "      <td>4.4</td>\n",
       "      <td>80.5</td>\n",
       "      <td>74.6</td>\n",
       "      <td>79.1</td>\n",
       "      <td>69.8</td>\n",
       "      <td>76.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>4.9</td>\n",
       "      <td>70.4</td>\n",
       "      <td>74.0</td>\n",
       "      <td>77.6</td>\n",
       "      <td>67.5</td>\n",
       "      <td>77.1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        class  Python  Keras  Tensorflow  Java   C++\n",
       "sex                                                 \n",
       "famale    4.4    80.5   74.6        79.1  69.8  76.9\n",
       "male      4.9    70.4   74.0        77.6  67.5  77.1"
      ]
     },
     "execution_count": 142,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#按性别分组计算平均值\n",
    "df.groupby(by = 'sex').mean().round(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "id": "7f79e0e9-5430-475e-bc7c-69e4d4e6966c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "sex\n",
       "famale    149\n",
       "male      151\n",
       "dtype: int64"
      ]
     },
     "execution_count": 143,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#按性别分组统计男女生数量\n",
    "df.groupby(by = 'sex').size()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "id": "559afa71-b461-4303-8e1f-932d16d8ce4a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "sex     class\n",
       "famale  1        29\n",
       "        2        15\n",
       "        3        15\n",
       "        4        16\n",
       "        5        15\n",
       "        6        15\n",
       "        7        23\n",
       "        8        21\n",
       "male    1        13\n",
       "        2        22\n",
       "        3        16\n",
       "        4        17\n",
       "        5         9\n",
       "        6        24\n",
       "        7        28\n",
       "        8        22\n",
       "dtype: int64"
      ]
     },
     "execution_count": 144,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#按性别和班级分组统计各班男女生数量\n",
    "df.groupby(by = ['sex', 'class']).size()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "id": "7cb89d3f-3f40-499a-82cc-307b425b3352",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"8\" halign=\"left\">Python</th>\n",
       "      <th colspan=\"8\" halign=\"left\">Java</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>class</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sex</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>famale</th>\n",
       "      <td>66.103448</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>82.4000</td>\n",
       "      <td>93.000000</td>\n",
       "      <td>86.200000</td>\n",
       "      <td>82.666667</td>\n",
       "      <td>74.304348</td>\n",
       "      <td>90.904762</td>\n",
       "      <td>68.172414</td>\n",
       "      <td>61.8</td>\n",
       "      <td>75.466667</td>\n",
       "      <td>82.500000</td>\n",
       "      <td>53.800000</td>\n",
       "      <td>82.20</td>\n",
       "      <td>61.434783</td>\n",
       "      <td>75.904762</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>86.461538</td>\n",
       "      <td>71.590909</td>\n",
       "      <td>78.8125</td>\n",
       "      <td>50.529412</td>\n",
       "      <td>63.666667</td>\n",
       "      <td>56.416667</td>\n",
       "      <td>82.892857</td>\n",
       "      <td>71.000000</td>\n",
       "      <td>64.076923</td>\n",
       "      <td>63.0</td>\n",
       "      <td>66.687500</td>\n",
       "      <td>71.176471</td>\n",
       "      <td>65.666667</td>\n",
       "      <td>79.25</td>\n",
       "      <td>58.642857</td>\n",
       "      <td>71.227273</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           Python                                                       \\\n",
       "class           1          2        3          4          5          6   \n",
       "sex                                                                      \n",
       "famale  66.103448  80.000000  82.4000  93.000000  86.200000  82.666667   \n",
       "male    86.461538  71.590909  78.8125  50.529412  63.666667  56.416667   \n",
       "\n",
       "                                   Java                              \\\n",
       "class           7          8          1     2          3          4   \n",
       "sex                                                                   \n",
       "famale  74.304348  90.904762  68.172414  61.8  75.466667  82.500000   \n",
       "male    82.892857  71.000000  64.076923  63.0  66.687500  71.176471   \n",
       "\n",
       "                                                \n",
       "class           5      6          7          8  \n",
       "sex                                             \n",
       "famale  53.800000  82.20  61.434783  75.904762  \n",
       "male    65.666667  79.25  58.642857  71.227273  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#按性别和班级分组，统计各班男女生的 Python,Java 平均分\n",
    "g = df.groupby(by = ['sex', 'class'])[['Python', 'Java']].mean()\n",
    "\n",
    "#使用之前的知识：多层索引数据重塑\n",
    "g\n",
    "display(g.unstack())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e1bd15f1-3f77-48be-bbf3-1f912d18c258",
   "metadata": {},
   "source": [
    "### 分组聚合 apply 和 transform"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "id": "afd09be8-8b16-49c7-b400-662ae55d1107",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th>Python</th>\n",
       "      <th>Keras</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Java</th>\n",
       "      <th>C++</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>male</td>\n",
       "      <td>3</td>\n",
       "      <td>24</td>\n",
       "      <td>105</td>\n",
       "      <td>126</td>\n",
       "      <td>52</td>\n",
       "      <td>111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>famale</td>\n",
       "      <td>1</td>\n",
       "      <td>55</td>\n",
       "      <td>77</td>\n",
       "      <td>117</td>\n",
       "      <td>55</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>famale</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>52</td>\n",
       "      <td>143</td>\n",
       "      <td>2</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>famale</td>\n",
       "      <td>2</td>\n",
       "      <td>136</td>\n",
       "      <td>105</td>\n",
       "      <td>23</td>\n",
       "      <td>133</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>famale</td>\n",
       "      <td>7</td>\n",
       "      <td>87</td>\n",
       "      <td>56</td>\n",
       "      <td>64</td>\n",
       "      <td>106</td>\n",
       "      <td>129</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      sex  class  Python  Keras  Tensorflow  Java  C++\n",
       "0    male      3      24    105         126    52  111\n",
       "1  famale      1      55     77         117    55   29\n",
       "2  famale      1       3     52         143     2   27\n",
       "3  famale      2     136    105          23   133   13\n",
       "4  famale      7      87     56          64   106  129"
      ]
     },
     "execution_count": 146,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\n",
    "    'sex': np.random.randint(0, 2, size=300),#0famale, 1male\n",
    "    'class': np.random.randint(1, 9, size=300),#Class No.1~8\n",
    "    'Python': np.random.randint(0, 151, size=300),\n",
    "    'Keras': np.random.randint(0, 151, size=300),\n",
    "    'Tensorflow': np.random.randint(0, 151, size=300),\n",
    "    'Java': np.random.randint(0, 151, size=300),\n",
    "    'C++': np.random.randint(0, 151, size=300),\n",
    "})\n",
    "\n",
    "df['sex'] = df['sex'].map({0:'famale', 1:'male'})\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "id": "c50dcdd8-981c-4bb1-bd60-9b66895d1e89",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>class</th>\n",
       "      <th>sex</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">1</th>\n",
       "      <th>famale</th>\n",
       "      <td>62.1</td>\n",
       "      <td>74.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>87.4</td>\n",
       "      <td>85.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">2</th>\n",
       "      <th>famale</th>\n",
       "      <td>63.8</td>\n",
       "      <td>90.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>72.3</td>\n",
       "      <td>77.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">3</th>\n",
       "      <th>famale</th>\n",
       "      <td>74.3</td>\n",
       "      <td>72.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>64.6</td>\n",
       "      <td>69.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">4</th>\n",
       "      <th>famale</th>\n",
       "      <td>68.9</td>\n",
       "      <td>86.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>70.7</td>\n",
       "      <td>69.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">5</th>\n",
       "      <th>famale</th>\n",
       "      <td>95.4</td>\n",
       "      <td>78.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>67.6</td>\n",
       "      <td>85.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">6</th>\n",
       "      <th>famale</th>\n",
       "      <td>70.4</td>\n",
       "      <td>81.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>91.4</td>\n",
       "      <td>73.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">7</th>\n",
       "      <th>famale</th>\n",
       "      <td>78.2</td>\n",
       "      <td>58.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>81.2</td>\n",
       "      <td>71.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">8</th>\n",
       "      <th>famale</th>\n",
       "      <td>72.6</td>\n",
       "      <td>73.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>58.5</td>\n",
       "      <td>92.1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              Python  Keras\n",
       "class sex                  \n",
       "1     famale    62.1   74.1\n",
       "      male      87.4   85.2\n",
       "2     famale    63.8   90.4\n",
       "      male      72.3   77.3\n",
       "3     famale    74.3   72.7\n",
       "      male      64.6   69.3\n",
       "4     famale    68.9   86.8\n",
       "      male      70.7   69.4\n",
       "5     famale    95.4   78.1\n",
       "      male      67.6   85.0\n",
       "6     famale    70.4   81.7\n",
       "      male      91.4   73.1\n",
       "7     famale    78.2   58.7\n",
       "      male      81.2   71.1\n",
       "8     famale    72.6   73.9\n",
       "      male      58.5   92.1"
      ]
     },
     "execution_count": 147,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#apply() 返回统计结果\n",
    "df.groupby(by = ['class', 'sex'])[['Python', 'Keras']].apply(np.mean, axis=0).round(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "id": "90ead51e-c8b4-42a8-bc71-d95a5948895c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>64.6</td>\n",
       "      <td>69.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>62.1</td>\n",
       "      <td>74.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>62.1</td>\n",
       "      <td>74.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>63.8</td>\n",
       "      <td>90.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>78.2</td>\n",
       "      <td>58.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>295</th>\n",
       "      <td>78.2</td>\n",
       "      <td>58.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>296</th>\n",
       "      <td>63.8</td>\n",
       "      <td>90.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>297</th>\n",
       "      <td>63.8</td>\n",
       "      <td>90.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>298</th>\n",
       "      <td>63.8</td>\n",
       "      <td>90.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>299</th>\n",
       "      <td>70.7</td>\n",
       "      <td>69.4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>300 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Python  Keras\n",
       "0      64.6   69.3\n",
       "1      62.1   74.1\n",
       "2      62.1   74.1\n",
       "3      63.8   90.4\n",
       "4      78.2   58.7\n",
       "..      ...    ...\n",
       "295    78.2   58.7\n",
       "296    63.8   90.4\n",
       "297    63.8   90.4\n",
       "298    63.8   90.4\n",
       "299    70.7   69.4\n",
       "\n",
       "[300 rows x 2 columns]"
      ]
     },
     "execution_count": 148,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#transform() 返回所有结果\n",
    "#问：为何没有体现性别？\n",
    "#答：体现了，比如行索引为 0 的 Python 列的值代表的是它（指行索引为 0 的学生）\n",
    "#   所在班级以及它所属性别的该学科平均值。有点绕，就是需要反推出学生所在的班级和性别\n",
    "df.groupby(by = ['class', 'sex'])[['Python', 'Keras']].transform('mean').round(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a55f420d-a77b-445b-9f08-8a6656766376",
   "metadata": {},
   "source": [
    "### 分组聚合 agg\n",
    "\n",
    "可对不同的列执行不同的操作"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "id": "41139532-29c5-49b6-a727-a50c8740ebbc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th>Python</th>\n",
       "      <th>Keras</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Java</th>\n",
       "      <th>C++</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>male</td>\n",
       "      <td>3</td>\n",
       "      <td>71</td>\n",
       "      <td>147</td>\n",
       "      <td>150</td>\n",
       "      <td>0</td>\n",
       "      <td>88</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>famale</td>\n",
       "      <td>6</td>\n",
       "      <td>144</td>\n",
       "      <td>58</td>\n",
       "      <td>25</td>\n",
       "      <td>27</td>\n",
       "      <td>89</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>famale</td>\n",
       "      <td>5</td>\n",
       "      <td>21</td>\n",
       "      <td>98</td>\n",
       "      <td>55</td>\n",
       "      <td>95</td>\n",
       "      <td>111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>famale</td>\n",
       "      <td>7</td>\n",
       "      <td>15</td>\n",
       "      <td>20</td>\n",
       "      <td>13</td>\n",
       "      <td>131</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>male</td>\n",
       "      <td>2</td>\n",
       "      <td>38</td>\n",
       "      <td>22</td>\n",
       "      <td>88</td>\n",
       "      <td>81</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      sex  class  Python  Keras  Tensorflow  Java  C++\n",
       "0    male      3      71    147         150     0   88\n",
       "1  famale      6     144     58          25    27   89\n",
       "2  famale      5      21     98          55    95  111\n",
       "3  famale      7      15     20          13   131    1\n",
       "4    male      2      38     22          88    81   30"
      ]
     },
     "execution_count": 149,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\n",
    "    'sex': np.random.randint(0, 2, size=300),#0famale, 1male\n",
    "    'class': np.random.randint(1, 9, size=300),#Class No.1~8\n",
    "    'Python': np.random.randint(0, 151, size=300),\n",
    "    'Keras': np.random.randint(0, 151, size=300),\n",
    "    'Tensorflow': np.random.randint(0, 151, size=300),\n",
    "    'Java': np.random.randint(0, 151, size=300),\n",
    "    'C++': np.random.randint(0, 151, size=300),\n",
    "})\n",
    "\n",
    "df['sex'] = df['sex'].map({0:'famale', 1:'male'})\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "id": "b4c54d7b-adce-424a-b519-081dd7439c03",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th colspan=\"3\" halign=\"left\">Tensorflow</th>\n",
       "      <th colspan=\"3\" halign=\"left\">Keras</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>max</th>\n",
       "      <th>min</th>\n",
       "      <th>count</th>\n",
       "      <th>max</th>\n",
       "      <th>min</th>\n",
       "      <th>count</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>class</th>\n",
       "      <th>sex</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">1</th>\n",
       "      <th>famale</th>\n",
       "      <td>146</td>\n",
       "      <td>1</td>\n",
       "      <td>15</td>\n",
       "      <td>143</td>\n",
       "      <td>48</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>146</td>\n",
       "      <td>7</td>\n",
       "      <td>18</td>\n",
       "      <td>147</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">2</th>\n",
       "      <th>famale</th>\n",
       "      <td>149</td>\n",
       "      <td>0</td>\n",
       "      <td>19</td>\n",
       "      <td>148</td>\n",
       "      <td>8</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>148</td>\n",
       "      <td>0</td>\n",
       "      <td>19</td>\n",
       "      <td>149</td>\n",
       "      <td>15</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">3</th>\n",
       "      <th>famale</th>\n",
       "      <td>124</td>\n",
       "      <td>8</td>\n",
       "      <td>14</td>\n",
       "      <td>150</td>\n",
       "      <td>3</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>150</td>\n",
       "      <td>14</td>\n",
       "      <td>13</td>\n",
       "      <td>147</td>\n",
       "      <td>8</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">4</th>\n",
       "      <th>famale</th>\n",
       "      <td>145</td>\n",
       "      <td>0</td>\n",
       "      <td>24</td>\n",
       "      <td>149</td>\n",
       "      <td>0</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>141</td>\n",
       "      <td>3</td>\n",
       "      <td>30</td>\n",
       "      <td>139</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">5</th>\n",
       "      <th>famale</th>\n",
       "      <td>148</td>\n",
       "      <td>9</td>\n",
       "      <td>22</td>\n",
       "      <td>140</td>\n",
       "      <td>3</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>138</td>\n",
       "      <td>0</td>\n",
       "      <td>24</td>\n",
       "      <td>148</td>\n",
       "      <td>14</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">6</th>\n",
       "      <th>famale</th>\n",
       "      <td>147</td>\n",
       "      <td>10</td>\n",
       "      <td>27</td>\n",
       "      <td>150</td>\n",
       "      <td>6</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>145</td>\n",
       "      <td>7</td>\n",
       "      <td>20</td>\n",
       "      <td>142</td>\n",
       "      <td>14</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">7</th>\n",
       "      <th>famale</th>\n",
       "      <td>121</td>\n",
       "      <td>13</td>\n",
       "      <td>14</td>\n",
       "      <td>146</td>\n",
       "      <td>4</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>148</td>\n",
       "      <td>14</td>\n",
       "      <td>14</td>\n",
       "      <td>137</td>\n",
       "      <td>0</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">8</th>\n",
       "      <th>famale</th>\n",
       "      <td>144</td>\n",
       "      <td>5</td>\n",
       "      <td>12</td>\n",
       "      <td>148</td>\n",
       "      <td>7</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>133</td>\n",
       "      <td>0</td>\n",
       "      <td>15</td>\n",
       "      <td>147</td>\n",
       "      <td>0</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             Tensorflow           Keras          \n",
       "                    max min count   max min count\n",
       "class sex                                        \n",
       "1     famale        146   1    15   143  48    15\n",
       "      male          146   7    18   147   4    18\n",
       "2     famale        149   0    19   148   8    19\n",
       "      male          148   0    19   149  15    19\n",
       "3     famale        124   8    14   150   3    14\n",
       "      male          150  14    13   147   8    13\n",
       "4     famale        145   0    24   149   0    24\n",
       "      male          141   3    30   139   1    30\n",
       "5     famale        148   9    22   140   3    22\n",
       "      male          138   0    24   148  14    24\n",
       "6     famale        147  10    27   150   6    27\n",
       "      male          145   7    20   142  14    20\n",
       "7     famale        121  13    14   146   4    14\n",
       "      male          148  14    14   137   0    14\n",
       "8     famale        144   5    12   148   7    12\n",
       "      male          133   0    15   147   0    15"
      ]
     },
     "execution_count": 150,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#分组后调用 agg 对多列同时应用多种统计汇总\n",
    "df.groupby(by = ['class', 'sex'])[['Tensorflow', 'Keras']] \\\n",
    "    .agg(['max', 'min', pd.Series.count])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "id": "157a2ab9-b758-44ba-a722-9169410da682",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">Tensorflow</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Keras</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>最大值</th>\n",
       "      <th>最小值</th>\n",
       "      <th>计数</th>\n",
       "      <th>中位数</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>class</th>\n",
       "      <th>sex</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">1</th>\n",
       "      <th>famale</th>\n",
       "      <td>146</td>\n",
       "      <td>1</td>\n",
       "      <td>15</td>\n",
       "      <td>102.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>146</td>\n",
       "      <td>7</td>\n",
       "      <td>18</td>\n",
       "      <td>79.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">2</th>\n",
       "      <th>famale</th>\n",
       "      <td>149</td>\n",
       "      <td>0</td>\n",
       "      <td>19</td>\n",
       "      <td>66.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>148</td>\n",
       "      <td>0</td>\n",
       "      <td>19</td>\n",
       "      <td>57.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">3</th>\n",
       "      <th>famale</th>\n",
       "      <td>124</td>\n",
       "      <td>8</td>\n",
       "      <td>14</td>\n",
       "      <td>67.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>150</td>\n",
       "      <td>14</td>\n",
       "      <td>13</td>\n",
       "      <td>58.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">4</th>\n",
       "      <th>famale</th>\n",
       "      <td>145</td>\n",
       "      <td>0</td>\n",
       "      <td>24</td>\n",
       "      <td>77.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>141</td>\n",
       "      <td>3</td>\n",
       "      <td>30</td>\n",
       "      <td>59.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">5</th>\n",
       "      <th>famale</th>\n",
       "      <td>148</td>\n",
       "      <td>9</td>\n",
       "      <td>22</td>\n",
       "      <td>74.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>138</td>\n",
       "      <td>0</td>\n",
       "      <td>24</td>\n",
       "      <td>62.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">6</th>\n",
       "      <th>famale</th>\n",
       "      <td>147</td>\n",
       "      <td>10</td>\n",
       "      <td>27</td>\n",
       "      <td>90.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>145</td>\n",
       "      <td>7</td>\n",
       "      <td>20</td>\n",
       "      <td>90.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">7</th>\n",
       "      <th>famale</th>\n",
       "      <td>121</td>\n",
       "      <td>13</td>\n",
       "      <td>14</td>\n",
       "      <td>99.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>148</td>\n",
       "      <td>14</td>\n",
       "      <td>14</td>\n",
       "      <td>63.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">8</th>\n",
       "      <th>famale</th>\n",
       "      <td>144</td>\n",
       "      <td>5</td>\n",
       "      <td>12</td>\n",
       "      <td>108.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>133</td>\n",
       "      <td>0</td>\n",
       "      <td>15</td>\n",
       "      <td>45.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             Tensorflow     Keras       \n",
       "                    最大值 最小值    计数    中位数\n",
       "class sex                               \n",
       "1     famale        146   1    15  102.0\n",
       "      male          146   7    18   79.0\n",
       "2     famale        149   0    19   66.0\n",
       "      male          148   0    19   57.0\n",
       "3     famale        124   8    14   67.5\n",
       "      male          150  14    13   58.0\n",
       "4     famale        145   0    24   77.5\n",
       "      male          141   3    30   59.0\n",
       "5     famale        148   9    22   74.0\n",
       "      male          138   0    24   62.0\n",
       "6     famale        147  10    27   90.0\n",
       "      male          145   7    20   90.5\n",
       "7     famale        121  13    14   99.0\n",
       "      male          148  14    14   63.0\n",
       "8     famale        144   5    12  108.5\n",
       "      male          133   0    15   45.0"
      ]
     },
     "execution_count": 151,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#不同列应用不同的统计汇总\n",
    "df.groupby(by = ['class', 'sex'])[['Tensorflow', 'Keras']] \\\n",
    "    .agg({\n",
    "        'Tensorflow': [('最大值', 'max'), ('最小值', 'min')],\n",
    "        'Keras': [('计数', pd.Series.count), ('中位数', 'median')]\n",
    "    })"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5828fc89-8820-4b9d-8205-321101c26198",
   "metadata": {},
   "source": [
    "### 透视表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "id": "9d8ab56b-4a6d-4043-b0b9-90f91621e373",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th>Python</th>\n",
       "      <th>Keras</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Java</th>\n",
       "      <th>C++</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>male</td>\n",
       "      <td>4</td>\n",
       "      <td>61</td>\n",
       "      <td>20</td>\n",
       "      <td>108</td>\n",
       "      <td>18</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>male</td>\n",
       "      <td>7</td>\n",
       "      <td>149</td>\n",
       "      <td>95</td>\n",
       "      <td>91</td>\n",
       "      <td>87</td>\n",
       "      <td>109</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>famale</td>\n",
       "      <td>2</td>\n",
       "      <td>143</td>\n",
       "      <td>94</td>\n",
       "      <td>19</td>\n",
       "      <td>31</td>\n",
       "      <td>150</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>male</td>\n",
       "      <td>6</td>\n",
       "      <td>148</td>\n",
       "      <td>80</td>\n",
       "      <td>28</td>\n",
       "      <td>35</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>male</td>\n",
       "      <td>4</td>\n",
       "      <td>149</td>\n",
       "      <td>61</td>\n",
       "      <td>143</td>\n",
       "      <td>4</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      sex  class  Python  Keras  Tensorflow  Java  C++\n",
       "0    male      4      61     20         108    18   12\n",
       "1    male      7     149     95          91    87  109\n",
       "2  famale      2     143     94          19    31  150\n",
       "3    male      6     148     80          28    35   84\n",
       "4    male      4     149     61         143     4   49"
      ]
     },
     "execution_count": 152,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\n",
    "    'sex': np.random.randint(0, 2, size=300),#0famale, 1male\n",
    "    'class': np.random.randint(1, 9, size=300),#Class No.1~8\n",
    "    'Python': np.random.randint(0, 151, size=300),\n",
    "    'Keras': np.random.randint(0, 151, size=300),\n",
    "    'Tensorflow': np.random.randint(0, 151, size=300),\n",
    "    'Java': np.random.randint(0, 151, size=300),\n",
    "    'C++': np.random.randint(0, 151, size=300),\n",
    "})\n",
    "df['sex'] = df['sex'].map({0:'famale', 1:'male'})\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "id": "46934122-4f47-4565-a794-18840ded17c5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">Keras</th>\n",
       "      <th>Python</th>\n",
       "      <th colspan=\"3\" halign=\"left\">Tensorflow</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>最大值</th>\n",
       "      <th>最小值</th>\n",
       "      <th>最大值</th>\n",
       "      <th>平均值</th>\n",
       "      <th>最小值</th>\n",
       "      <th>计数</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>class</th>\n",
       "      <th>sex</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">1</th>\n",
       "      <th>famale</th>\n",
       "      <td>145</td>\n",
       "      <td>2</td>\n",
       "      <td>132</td>\n",
       "      <td>85.777778</td>\n",
       "      <td>6</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>119</td>\n",
       "      <td>7</td>\n",
       "      <td>138</td>\n",
       "      <td>73.833333</td>\n",
       "      <td>10</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">2</th>\n",
       "      <th>famale</th>\n",
       "      <td>145</td>\n",
       "      <td>13</td>\n",
       "      <td>143</td>\n",
       "      <td>53.062500</td>\n",
       "      <td>2</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>146</td>\n",
       "      <td>1</td>\n",
       "      <td>137</td>\n",
       "      <td>74.857143</td>\n",
       "      <td>0</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">3</th>\n",
       "      <th>famale</th>\n",
       "      <td>133</td>\n",
       "      <td>2</td>\n",
       "      <td>142</td>\n",
       "      <td>77.615385</td>\n",
       "      <td>10</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>138</td>\n",
       "      <td>0</td>\n",
       "      <td>145</td>\n",
       "      <td>82.705882</td>\n",
       "      <td>0</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">4</th>\n",
       "      <th>famale</th>\n",
       "      <td>141</td>\n",
       "      <td>13</td>\n",
       "      <td>150</td>\n",
       "      <td>65.466667</td>\n",
       "      <td>7</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>146</td>\n",
       "      <td>2</td>\n",
       "      <td>149</td>\n",
       "      <td>94.941176</td>\n",
       "      <td>1</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">5</th>\n",
       "      <th>famale</th>\n",
       "      <td>148</td>\n",
       "      <td>8</td>\n",
       "      <td>133</td>\n",
       "      <td>74.142857</td>\n",
       "      <td>3</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>146</td>\n",
       "      <td>4</td>\n",
       "      <td>143</td>\n",
       "      <td>76.789474</td>\n",
       "      <td>4</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">6</th>\n",
       "      <th>famale</th>\n",
       "      <td>144</td>\n",
       "      <td>19</td>\n",
       "      <td>145</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>11</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>149</td>\n",
       "      <td>3</td>\n",
       "      <td>150</td>\n",
       "      <td>75.240000</td>\n",
       "      <td>9</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">7</th>\n",
       "      <th>famale</th>\n",
       "      <td>142</td>\n",
       "      <td>0</td>\n",
       "      <td>144</td>\n",
       "      <td>84.666667</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>146</td>\n",
       "      <td>17</td>\n",
       "      <td>149</td>\n",
       "      <td>84.818182</td>\n",
       "      <td>3</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">8</th>\n",
       "      <th>famale</th>\n",
       "      <td>148</td>\n",
       "      <td>9</td>\n",
       "      <td>146</td>\n",
       "      <td>81.920000</td>\n",
       "      <td>19</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>148</td>\n",
       "      <td>2</td>\n",
       "      <td>139</td>\n",
       "      <td>68.444444</td>\n",
       "      <td>5</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             Keras     Python Tensorflow        \n",
       "               最大值 最小值    最大值        平均值 最小值  计数\n",
       "class sex                                       \n",
       "1     famale   145   2    132  85.777778   6  18\n",
       "      male     119   7    138  73.833333  10  18\n",
       "2     famale   145  13    143  53.062500   2  16\n",
       "      male     146   1    137  74.857143   0  21\n",
       "3     famale   133   2    142  77.615385  10  13\n",
       "      male     138   0    145  82.705882   0  17\n",
       "4     famale   141  13    150  65.466667   7  15\n",
       "      male     146   2    149  94.941176   1  17\n",
       "5     famale   148   8    133  74.142857   3  21\n",
       "      male     146   4    143  76.789474   4  19\n",
       "6     famale   144  19    145  99.000000  11  23\n",
       "      male     149   3    150  75.240000   9  25\n",
       "7     famale   142   0    144  84.666667   6  12\n",
       "      male     146  17    149  84.818182   3  22\n",
       "8     famale   148   9    146  81.920000  19  25\n",
       "      male     148   2    139  68.444444   5  18"
      ]
     },
     "execution_count": 153,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def count(x):\n",
    "    return len(x)\n",
    "\n",
    "df.pivot_table(values=['Python', 'Keras', 'Tensorflow'], #要透视分组的值，就是要查看的列\n",
    "               index=['class', 'sex'], #分组透视指标，就是以 xxx 分组\n",
    "               aggfunc={ #指定列的聚合操作\n",
    "                   'Python': [('最大值', 'max')],\n",
    "                   'Keras': [('最小值', 'min'), ('最大值', 'max')],\n",
    "                   'Tensorflow': [('最小值', 'min'), ('平均值', 'mean'), ('计数', count)],\n",
    "               })"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "60e35d46-0bf3-4cd4-a8db-6ffbf9ea574d",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 时间序列\n",
    "\n",
    "（老师没讲）"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b0101b1-ab03-4136-9ac6-c0cbbef7d328",
   "metadata": {},
   "source": [
    "### 时间戳操作"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "id": "ccc76efa-1fce-49c2-b78a-c219b330ab1b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp('2020-08-24 12:00:00')"
      ]
     },
     "execution_count": 154,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Timestamp('2020-8-24 12')# 时刻数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "id": "b1c9b1ab-69c2-4d03-b3f6-8de53748ec07",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Period('2020-08', 'M')"
      ]
     },
     "execution_count": 155,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Period('2020-8-24', freq = 'M') # 时期数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "id": "abb06044-6a6a-4510-98ba-fb80931bb739",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2020-08-31', '2020-09-30', '2020-10-31', '2020-11-30',\n",
       "               '2020-12-31'],\n",
       "              dtype='datetime64[ns]', freq='ME')"
      ]
     },
     "execution_count": 156,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.date_range('2020.08.24', periods=5, freq = 'ME') # 批量时刻数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "id": "6cceb228-17a1-46cd-b840-83f8dc1e129f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "PeriodIndex(['2020-08', '2020-09', '2020-10', '2020-11', '2020-12'], dtype='period[M]')"
      ]
     },
     "execution_count": 157,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.period_range('2020.08.24', periods=5, freq='M') # 批量时期数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "id": "f9eac9d2-1a78-48aa-9312-2b3eec7c3b49",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DatetimeIndex(['2020-08-31', '2020-09-30', '2020-10-31', '2020-11-30',\n",
      "               '2020-12-31'],\n",
      "              dtype='datetime64[ns]', freq='ME')\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "2020-08-31    6\n",
       "2020-09-30    6\n",
       "2020-10-31    9\n",
       "2020-11-30    2\n",
       "2020-12-31    6\n",
       "Freq: ME, dtype: int64"
      ]
     },
     "execution_count": 158,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "index = pd.date_range('2020.08.24', periods=5, freq = 'ME') # 批量时刻数据\n",
    "print(index)\n",
    "\n",
    "pd.Series(np.random.randint(0, 10, size = 5), index = index) # 时间戳索引Series"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "15d9aea2-39fe-4b57-b311-e8e7188babb4",
   "metadata": {},
   "source": [
    "**转换方法**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "id": "2f3e66de-71a0-4ee2-b5de-ea509483e71e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2020-08-24', '2020-08-24', '2020-08-24', '2020-08-24'], dtype='datetime64[ns]', freq=None)"
      ]
     },
     "execution_count": 159,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.to_datetime(['2020.08.24','2020-08-24','24/08/2020','2020/8/24'], format='mixed')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "id": "608d8063-7da8-4a3f-bfb3-9a1bb51726f6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2020-08-28 02:37:12'], dtype='datetime64[ns]', freq=None)"
      ]
     },
     "execution_count": 160,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.to_datetime([1598582232],unit='s')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "id": "4f454439-60d7-4827-ae3e-af83313dba11",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2020-08-28 02:40:20.401000'], dtype='datetime64[ns]', freq=None)"
      ]
     },
     "execution_count": 161,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt = pd.to_datetime([1598582420401],unit = 'ms') # 世界标准时间\n",
    "dt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "id": "0d4061fd-e0a3-4423-bbb3-695a42bacec1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2020-08-28 10:40:20.401000'], dtype='datetime64[ns]', freq=None)"
      ]
     },
     "execution_count": 162,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt + pd.DateOffset(hours = 8) # 东八区时间"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 163,
   "id": "f6e4ac45-1f09-4904-a90b-4d0d1753d220",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2020-12-06 02:40:20.401000'], dtype='datetime64[ns]', freq=None)"
      ]
     },
     "execution_count": 163,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt + pd.DateOffset(days = 100) # 100天后日期"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ca48edb7-67c4-4498-8306-0f78683112c1",
   "metadata": {},
   "source": [
    "### 时间戳索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "id": "0486843a-dcc8-47e6-9991-d2b9d338686e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index([0, 1, 2, 3, 4, 5, 6, 0, 1, 2,\n",
       "       ...\n",
       "       1, 2, 3, 4, 5, 6, 0, 1, 2, 3],\n",
       "      dtype='int32', length=200)"
      ]
     },
     "execution_count": 164,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "index = pd.date_range(\"2020-8-24\", periods=200, freq=\"D\")\n",
    "ts = pd.Series(range(len(index)), index=index)\n",
    "\n",
    "# str类型索引\n",
    "ts['2020-08-30'] # 日期访问数据\n",
    "ts['2020-08-24':'2020-09-3'] # 日期切片\n",
    "ts['2020-08'] # 传入年月\n",
    "ts['2020'] # 传入年\n",
    "\n",
    "# 时间戳索引\n",
    "ts[pd.Timestamp('2020-08-30')]\n",
    "ts[pd.Timestamp('2020-08-24'):pd.Timestamp('2020-08-30')] # 切片\n",
    "ts[pd.date_range('2020-08-24',periods=10,freq='D')]\n",
    "\n",
    "# 时间戳索引属性\n",
    "ts.index.year # 获取年\n",
    "ts.index.dayofweek # 获取星期几\n",
    "# ts.index.weekofyear # 一年中第几个星期几"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "67681148-6bca-47db-972a-d70d4f43a11e",
   "metadata": {},
   "source": [
    "### 时间序列常用方法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "id": "7ae89cb2-b987-4360-8b53-165bfcaeac7d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>price</th>\n",
       "      <th>volume</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2020-01-08</th>\n",
       "      <td>21</td>\n",
       "      <td>110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-01-09</th>\n",
       "      <td>22</td>\n",
       "      <td>140</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-01-10</th>\n",
       "      <td>32</td>\n",
       "      <td>150</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-01-11</th>\n",
       "      <td>36</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            price  volume\n",
       "2020-01-08     21     110\n",
       "2020-01-09     22     140\n",
       "2020-01-10     32     150\n",
       "2020-01-11     36      90"
      ]
     },
     "execution_count": 165,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "index = pd.date_range('8/1/2020', periods=365, freq='D')\n",
    "ts = pd.Series(np.random.randint(0, 500, len(index)), index=index)\n",
    "\n",
    "# 1、移动\n",
    "ts.shift(periods = 2) #  数据后移 \n",
    "ts.shift(periods = -2) # 数据前移\n",
    "\n",
    "# 日期移动\n",
    "ts.shift(periods = 2,freq = pd.tseries.offsets.Day()) # 天移动\n",
    "# ts.tshift(periods = 1,freq = pd.tseries.offsets.MonthOffset()) #月移动\n",
    "\n",
    "# 2、频率转换\n",
    "ts.asfreq(pd.tseries.offsets.Week()) # 天变周\n",
    "ts.asfreq(pd.tseries.offsets.MonthEnd()) # 天变月\n",
    "ts.asfreq(pd.tseries.offsets.Hour(),fill_value = 0) #天变小时，又少变多，fill_value为填充值\n",
    "\n",
    "# 3、重采样\n",
    "# resample 表示根据日期维度进行数据聚合，可以按照分钟、小时、工作日、周、月、年等来作为日期维度\n",
    "ts.resample('2W').sum() # 以2周为单位进行汇总\n",
    "ts.resample('3ME').sum().cumsum() # 以季度为单位进行汇总\n",
    "\n",
    "# 4、DataFrame重采样\n",
    "d = dict({'price': [10, 11, 9, 13, 14, 18, 17, 19],\n",
    "          'volume': [50, 60, 40, 100, 50, 100, 40, 50],\n",
    "          'week_starting':pd.date_range('24/08/2020',periods=8,freq='W')})\n",
    "df1 = pd.DataFrame(d)\n",
    "df1.resample('ME',on = 'week_starting').apply('sum')\n",
    "df1.resample('ME',on = 'week_starting').agg({'price':'mean','volume':'sum'})\n",
    "\n",
    "days = pd.date_range('1/8/2020', periods=4, freq='D')\n",
    "data2 = dict({'price': [10, 11, 9, 13, 14, 18, 17, 19],\n",
    "           'volume': [50, 60, 40, 100, 50, 100, 40, 50]})\n",
    "df2 = pd.DataFrame(data2,\n",
    "                   index=pd.MultiIndex.from_product([days,['morning','afternoon']]))\n",
    "df2.resample('D', level=0).sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2e17fdbf-8b47-4388-9ab6-51f7ae7dc071",
   "metadata": {},
   "source": [
    "### 时区表示"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "id": "793b5afd-8b38-49ce-ba74-7f2a45998360",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-08-01 08:00:00+08:00    0.064632\n",
       "2012-08-02 08:00:00+08:00    0.016180\n",
       "2012-08-03 08:00:00+08:00   -0.336129\n",
       "2012-08-04 08:00:00+08:00   -0.602335\n",
       "2012-08-05 08:00:00+08:00    0.646871\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 166,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "index = pd.date_range('8/1/2012 00:00', periods=5, freq='D')\n",
    "ts = pd.Series(np.random.randn(len(index)), index)\n",
    "import pytz\n",
    "pytz.common_timezones # 常用时区\n",
    "# 时区表示\n",
    "ts = ts.tz_localize(tz='UTC')\n",
    "# 转换成其它时区\n",
    "ts.tz_convert(tz = 'Asia/Shanghai')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4d73208f-b879-4920-92f7-b148a13e9355",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 数据可视化\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "id": "3a7a587c-da4e-4dec-89c4-722711ce5d68",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 167,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 线性图\n",
    "df1 = pd.DataFrame(data = np.random.randn(1000,4),\n",
    "                  index = pd.date_range(start = '27/6/2012',periods=1000),\n",
    "                  columns=list('ABCD'))\n",
    "df1.cumsum().plot() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "id": "aa372804-2a15-4797-8341-3f68ab277bb7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 168,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiIAAAGZCAYAAAC0UVoBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAjPklEQVR4nO3de1RVdf7/8dcB5ICKGIYCiQpRXkq7mmk3LRpxzMY1ThcnS5uysaws7QL17eJUg6tpmqnRhV1ssJuXyqbbiJVdrBnvRlGBoyZJAkY3QKqDcj6/P+bnmVgqgfo5n3M4z8dae6322Zv9fm8NefHZn723xxhjBAAA4ECU6wYAAEDkIogAAABnCCIAAMAZgggAAHCGIAIAAJwhiAAAAGcIIgAAwBmCCAAAcIYgAgAAnIlx3UBL/H6/KisrlZCQII/H47odAADQCsYY1dfXKy0tTVFRLY95WA0id999t2bOnNnss759+6qsrKxVX19ZWan09HQbrQEAAMsqKirUs2fPFvexPiJyzDHH6M033/xfwZjWl0xISJD03xPp0qXLIe8NAAAcenV1dUpPTw/8HG+J9SASExOjlJSUA/raPZdjunTpQhABACDMtGZahfXJqps2bVJaWpoyMzN1ySWXaNu2bfvd1+fzqa6urtkCAADaL6tBZMiQISosLFRRUZEKCgq0detWnXHGGaqvr9/n/vn5+UpMTAwszA8BAKB98xhjTLCKfffdd+rdu7cefPBBXXHFFXtt9/l88vl8gfU915hqa2u5NAMAQJioq6tTYmJiq35+B/X23a5du+roo4/W5s2b97nd6/XK6/UGsyUAAA4pv9+vxsZG121YFxsb+7O35rZGUIPIzp07tWXLFl166aXBLAsAQFA0NjZq69at8vv9rluxLioqShkZGYqNjT2o41gNIjfddJPGjBmj3r17q7KyUnfddZeio6M1fvx4m2UBAAg6Y4yqqqoUHR2t9PT0QzJaEKr2PHC0qqpKvXr1OqiHjloNIl988YXGjx+vr7/+WsnJyTr99NO1atUqJScn2ywLAEDQ7d69W99//73S0tLUsWNH1+1Yl5ycrMrKSu3evVsdOnQ44ONYDSILFy60eXgAAEJGU1OTJB30pYpwsec8m5qaDiqItN9xIwAAHIiUd6MdqvMkiAAAAGcIIgAAwJmg3r4LAECk6ZP7WlDrlc8afUBft3LlSp1++unKycnRa68Fr2dGRAAAgObNm6frrrtOK1asUGVlZdDqEkQAAIhwO3fu1KJFi3T11Vdr9OjRKiwsDFptLs2EqNJ+/a3X6F9War0GACD0LV68WP369VPfvn01YcIE3XDDDcrLywvKHUCMiAAAEOHmzZunCRMmSJJycnJUW1urd999Nyi1CSIAAESwjRs3as2aNYHXr8TExOiiiy7SvHnzglKfSzMAAESwefPmaffu3UpLSwt8ZoyR1+vV7NmzlZiYaLU+IyIAAESo3bt368knn9Sf//xnFRcXB5YPP/xQaWlpWrBggfUeGBEBACBCvfrqq/r22291xRVX7DXyMW7cOM2bN09Tpkyx2gNBBAAAiw70AWPBMG/ePGVnZ+/z8su4ceN0//3366OPPtKgQYOs9UAQAQAgQr3yyiv73XbKKafIGGO9B+aIAAAAZwgiAADAGYIIAABwhiACAACcIYgAAABnCCIAAMAZgggAAHCGIAIAAJwhiAAAAGcIIgAAwBke8Q4AgE137/0eF7v1atu0+6RJkzR//vzAelJSkgYPHqz777/f6jtm9mBEBACACJeTk6OqqipVVVVp+fLliomJ0XnnnReU2gQRAAAinNfrVUpKilJSUnT88ccrNzdXFRUVqqmpsV6bIAIAAAJ27typp59+WllZWerWrZv1eswRAQAgwr366qvq3LmzJKmhoUGpqal69dVXFRVlf7yCEREAACLciBEjVFxcrOLiYq1Zs0YjR47UqFGj9Pnnn1uvTRABACDCderUSVlZWcrKytLgwYP1+OOPq6GhQY899pj12kELIrNmzZLH49ENN9wQrJIAAOAAeDweRUVF6YcffrBeKyhzRNauXatHHnkkKPcjAwCAtvH5fKqurpYkffvtt5o9e7Z27typMWPGWK9tPYjs3LlTl1xyiR577DHde++9tssBABBa2viAMReKioqUmpoqSUpISFC/fv303HPPafjw4dZrW780M3XqVI0ePVrZ2dk/u6/P51NdXV2zBQAA2FNYWChjTGCpq6vTmjVrNG7cuKDUtzoisnDhQm3YsEFr165t1f75+fmaOXOmzZYAAEAIsTYiUlFRoWnTpumZZ55RXFxcq74mLy9PtbW1gaWiosJWewAAIARYGxFZv369vvzyS5144omBz5qamrRixQrNnj1bPp9P0dHRzb7G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kvTggw8Gs62D1tDQoMWLF2vz5s1KTU3V+PHjA+cSyjZs2KDDDjtMGRkZkqSnnnpKc+fO1bZt29S7d29de+21uvjiix132bLrrrtOF154oc444wzXrRy02bNna82aNfrlL3+piy++WE899ZTy8/Pl9/v161//Wn/4wx8UExO6v9OvW7dO2dnZysrKUnx8vFauXKnf/va3amxs1LJlyzRgwAAVFRUpISHBXZMmggwZMsRcddVVxu/377XN7/ebq666ypx66qkOOju0iouLTVRUlOs2WrRx40bTu3dv4/F4TFRUlDnzzDNNZWVlYHt1dXXIn4MxxixdutTExsaapKQkExcXZ5YuXWqSk5NNdna2Ofvss010dLRZvny56zZb5PF4zPHHH2+GDx/ebPF4PGbw4MFm+PDhZsSIEa7b/Fn9+/c3X3/9tTHGmG3btpk+ffqYxMREM3jwYJOUlGS6d+9uPvvsM8dd/rxBgwaZN954wxhjzGOPPWbi4+PN9ddfbwoKCswNN9xgOnfubObNm+e4y5bt+b4+6qijzKxZs0xVVZXrlg7IPffcYxISEsy4ceNMSkqKmTVrlunWrZu59957zR//+EeTnJxs7rzzTtdttui0004zd999d2D9qaeeMkOGDDHGGPPNN9+Y448/3lx//fWu2jPGGBNRQSQuLs6Ulpbud3tpaamJi4sLYkcH5qWXXmpx+ctf/hLyP8THjh1rRo8ebWpqasymTZvM6NGjTUZGhvn888+NMeETRIYOHWpuv/12Y4wxCxYsMIcddpi57bbbAttzc3PNueee66q9VsnPzzcZGRl7BaaYmBjzySefOOqq7Twej9mxY4cxxphLLrnEDBs2zHz33XfGGGPq6+tNdna2GT9+vMsWWyU+Pt6Ul5cbY4w54YQTzKOPPtps+zPPPGMGDBjgorVW83g85s033zTTpk0zhx9+uOnQoYM5//zzzSuvvGKamppct9dqRx55pHnhhReMMf/9BS86Oto8/fTTge1LliwxWVlZrtprlfj4eLNly5bAelNTk+nQoYOprq42xhjz+uuvm7S0NFftGWMiLIj06dPHzJ8/f7/b58+fb3r37h28hg7Qnt82PB7PfpdQ/yHevXt389FHHwXW/X6/mTJliunVq5fZsmVL2ASRLl26mE2bNhlj/vsNHhMTYzZs2BDYXlJSYnr06OGqvVZbs2aNOfroo82MGTNMY2OjMSa8g0hmZqZ5/fXXm23/17/+ZdLT01201ibdunUz69atM8b89/ukuLi42fbNmzeb+Ph4F6212k//LhobG82iRYvMyJEjTXR0tElLSzO33XZb4PsmlMXHxwd+OTLGmA4dOpiPP/44sF5eXm46duzoorVW6927t3n//fcD65WVlcbj8Zjvv//eGGPM1q1bnf8CHlF3zdx000266qqrNG3aNL388stavXq1Vq9erZdfflnTpk3TlClTdMstt7hu82elpqZqyZIl8vv9+1w2bNjgusWf9cMPPzS7rurxeFRQUKAxY8borLPO0n/+8x+H3bWNx+ORJEVFRSkuLq7Zq68TEhJUW1vrqrVWGzx4sNavX6+amhqdfPLJ+vjjjwPnFU729Pzjjz8qNTW12bYjjjhCNTU1Ltpqk1GjRqmgoECSdNZZZ+n5559vtn3x4sXKyspy0doB6dChgy688EIVFRXps88+0+TJk/XMM8+ob9++rlv7WSkpKfr0008lSZs2bVJTU1NgXZI++eQTde/e3VV7rTJ27FhNmTJFRUVFevvtt3XJJZforLPOUnx8vCRp48aNOuKII9w26TQGObBw4UIzZMgQExMTExg9iImJMUOGDDGLFi1y3V6rjBkzxtxxxx373V5cXGw8Hk8QO2q7wYMHmyeffHKf26ZOnWq6du0aFiMigwYNMkuXLg2sl5SUmF27dgXWV6xYYTIyMly0dsAWLFhgevToYaKiosJuRGTgwIHmhBNOMJ07dzbPP/98s+3vvvuuOeKIIxx113rbt283ffr0MWeeeaaZPn26iY+PN6effrqZPHmyOfPMM01sbKx57bXXXLfZop+OiOyL3+/fa8QqFP3f//2fSU5ONldeeaXJyMgwubm5plevXqagoMDMnTvXpKenmxtvvNF1my2qr683F154YeBn3rBhw5rNlVq2bJlZvHixww6Niai7Zn5q165d+uqrryRJhx9+uDp06OC4o9Z777331NDQoJycnH1ub2ho0Lp163TWWWcFubPWy8/P13vvvad//vOf+9x+zTXXaO7cufL7/UHurG3mzp2r9PR0jR49ep/bb7vtNn355Zd6/PHHg9zZwfniiy+0fv16ZWdnq1OnTq7baZWZM2c2Wz/11FM1cuTIwPrNN9+sL774QgsWLAh2a2323XffadasWXrllVf02Wefye/3KzU1VaeddppuvPHGkL+zLyMjQ+vWrQuLu5Ra4vf7NWvWLK1cuVLDhg1Tbm6uFi1apFtuuUXff/+9xowZo9mzZ4fF98iPP/6o3bt3q3Pnzq5b2UvEBhEAAOBeRM0RAQAAoYUgAgAAnCGIAAAAZwgiAADAGYIIAABwhiACAACcIYgAAABnCCIAAMCZ/wfNEtCisXzKswAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 条形图\n",
    "df1 = pd.DataFrame(data = np.random.randn(10,4),\n",
    "                  columns=list('ABCD'))\n",
    "df1.plot.bar(stacked = True) # stacked 表示是否堆叠"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "id": "5a59c9dc-9e8f-47c2-a4da-780f495f3565",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([<Axes: ylabel='One'>, <Axes: ylabel='Two'>], dtype=object)"
      ]
     },
     "execution_count": 169,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 800x800 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 饼图\n",
    "df3 = pd.DataFrame(data = np.random.rand(4,2),\n",
    "                   index = list('ABCD'),\n",
    "                   columns=['One','Two'])\n",
    "df3.plot.pie(subplots = True,figsize = (8,8)) # subplots 表示多个图；figsize 表示尺寸"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "id": "424066c1-eaf4-4a00-8519-ec235af48dc8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: xlabel='A', ylabel='B'>"
      ]
     },
     "execution_count": 170,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGwCAYAAABVdURTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAvEUlEQVR4nO3df3DU9Z3H8ddmTTYGyApuEn40NWAialGJYHIhitLJFStHjz9uysQKyKFWS8EzU38gAq22wHnCcRNoGRFUbtqAdarTORisjdCcMTdYTDr21EiaBDhtwi5IlmwqgeR7f7SsLiQhm+zud7/f7/MxszPls9+veedb2H19P7++LsMwDAEAANhEitkFAAAAxBLhBgAA2ArhBgAA2ArhBgAA2ArhBgAA2ArhBgAA2ArhBgAA2MplZheQaL29vfr00081atQouVwus8sBAACDYBiGTp8+rfHjxyslZeC+GceFm08//VS5ublmlwEAAIbg2LFj+spXvjLgMY4LN6NGjZL014uTmZlpcjUAAGAwgsGgcnNzw9/jA3FcuDk/FJWZmUm4AQDAYgYzpYQJxQAAwFYINwAAwFYINwAAwFZMDTc1NTWaO3euxo8fL5fLpddff/2S5xw4cEA333yzPB6P8vPz9dJLL8W9TgAAYB2mhptQKKSbbrpJW7ZsGdTxLS0tmjNnjmbNmqWGhgb9y7/8i+677z698cYbca4UAABYhamrpb75zW/qm9/85qCP37p1qyZOnKgNGzZIkq677jq9/fbb+vd//3fNnj07XmUCAAALsdScm7q6OpWVlUW0zZ49W3V1df2ec+bMGQWDwYgXAACwL0uFm7a2NuXk5ES05eTkKBgM6i9/+Uuf56xbt05erzf8YndiAADszVLhZihWrFihjo6O8OvYsWNmlwQAAOLIUjsUjx07Vu3t7RFt7e3tyszM1OWXX97nOR6PRx6PJxHlAQCAJGCpnpuSkhJVV1dHtL355psqKSkxqSLraPZ3an/jcbUEQmaXAgBAXJnac9PZ2ammpqbwn1taWtTQ0KAxY8boq1/9qlasWKFPPvlEO3fulCQ9+OCD2rx5sx577DH98z//s9566y298sor2rNnj1m/QtI71dWt5VUNqjnsD7fNLMhSZXmhvBmpJlYGAEB8mNpz8/vf/16FhYUqLCyUJFVUVKiwsFCrV6+WJP35z3/W0aNHw8dPnDhRe/bs0ZtvvqmbbrpJGzZs0AsvvMAy8AEsr2pQbVMgoq22KaBlVfUmVQQAQHy5DMMwzC4ikYLBoLxerzo6Omz/VPBmf6e+vuF3/b6//wd3aKJvRAIrAgBgaKL5/rbUnBtE58jJrgHfbz3B/BsAgP0QbmzsqjEZA76fdyW9NgAA+yHc2NikrJGaWZAlt8sV0e52uTSzIIshKQCALRFubK6yvFCl+b6IttJ8nyrLC02qCEAyYHsI2JmlNvFD9LwZqdq5pEgtgZBaT4SUd+UIemwAB2N7CDgBPTcOMdE3QrMmZxNsAIdjewg4AeEGAByi2d+pmsN+9VywA0iPYajmsJ8hKtgG4QYAHILtIeAUhBsAcAi2h4BTEG4AwCHYHgJOQbgBAAdhewg4AUvBAcBB2B4CTkC4AQAHmugj1MC+GJYCAAC2QrgBAAC2QrgBAAC2QrgBAAC2QrgBAAC2QrgBAAC2QrgBAAC2QrgBAAC2QrgBAAC2QrgBAAC2QrgBAAC2wrOl4DjN/k4dOdnFAwMBwKYIN3CMU13dWl7VoJrD/nDbzIIsVZYXypuRamJlAIBYYlgKjrG8qkG1TYGIttqmgJZV1ZtUEQAgHgg3cIRmf6dqDvvVYxgR7T2GoZrDfrUEQiZVBgB/1ezv1P7G43wexQDDUnCEIye7Bny/9USI+TcATMGQeezRcwNHuGpMxoDv511JsAFgDobMY49wA0eYlDVSMwuy5Ha5ItrdLpdmFmTRawPAFAyZxwfhBo5RWV6o0nxfRFtpvk+V5YUmVQTA6QYzZI7oMecGjuHNSNXOJUVqCYTUeiLEPjcATMeQeXwQbuA4E32EGgDJ4fyQeW1TIGJoyu1yqTTfx2fVEDEsBQCAiRgyjz16buBIPIIBQLJgyDz2CDdwFPaTAJCsGDKPHYal4CjsJwEA9ke4gWOwnwScju394RQMS8ExeAQDnIrhWDgNPTdwDPaTgFMxHAunIdzAMXgEA5yI4Vg4EeEGjsJ+EnAatveHEzHnBo7CfhJwGoZj4USEGzgS+0nAKdjeH07EsBQA2BzDsXAaem4AwOYYjoXTEG4AwCEYjoVTMCwFAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshX1uAAAYomZ/p46c7GJjxCRDuAEAIEqnurq1vKpBNYf94baZBVmqLC+UNyPVxMogMSwFAEDUllc1qLYpENFW2xTQsqp6kyrCl5kebrZs2aK8vDylp6eruLhYBw8eHPD4TZs2afLkybr88suVm5urRx55RJ9//nmCqgXio9nfqf2Nx9USCJldCoBLaPZ3quawP+Ip65LUYxiqOezn33ESMHVYavfu3aqoqNDWrVtVXFysTZs2afbs2WpsbFR2dvZFx//iF7/QE088oR07dmjGjBn6+OOPde+998rlcmnjxo0m/AbA8NC1DVjPkZNdA77feiLE/BuTmdpzs3HjRt1///1avHixrr/+em3dulUZGRnasWNHn8e/8847Ki0t1d133628vDx94xvfUHl5+SV7e4BkRdc2YD1XjckY8P28Kwk2ZjMt3HR3d+vQoUMqKyv7opiUFJWVlamurq7Pc2bMmKFDhw6Fw0xzc7P27t2ru+66q9+fc+bMGQWDwYgXkAzo2gasaVLWSM0syJLb5Ypod7tcmlmQRa9NEjAt3AQCAfX09CgnJyeiPScnR21tbX2ec/fdd+vpp5/WrbfeqtTUVF199dW644479OSTT/b7c9atWyev1xt+5ebmxvT3AIZqMF3bAJJTZXmhSvN9EW2l+T5VlheaVBG+zFJLwQ8cOKC1a9fqpz/9qYqLi9XU1KSHH35YzzzzjFatWtXnOStWrFBFRUX4z8FgkICDpEDXNmBd3oxU7VxSpJZASK0nQuxzk2RMCzc+n09ut1vt7e0R7e3t7Ro7dmyf56xatUoLFizQfffdJ0m64YYbFAqF9MADD2jlypVKSbm4I8rj8cjj8cT+FwCG6XzXdm1TIGJoyu1yqTTfxwclYAETfYSaZGTasFRaWpqmTZum6urqcFtvb6+qq6tVUlLS5zldXV0XBRi32y1JMi6Yt4ChY1ly4tC1DQCxZ+qwVEVFhRYtWqTp06erqKhImzZtUigU0uLFiyVJCxcu1IQJE7Ru3TpJ0ty5c7Vx40YVFhaGh6VWrVqluXPnhkMOho5lyYlH1zYwMB5vgKEwNdzMnz9ffr9fq1evVltbm6ZOnap9+/aFJxkfPXo0oqfmqaeeksvl0lNPPaVPPvlEWVlZmjt3rn7yk5+Y9SvYykDLkncuKTKpKmegaxuIxM0WhsNlOGw8JxgMyuv1qqOjQ5mZmWaXkzSa/Z36+obf9fv+/h/cwZcvgIRZuP1gv/PRuNlypmi+v01//AKSA8uSASQL9oDCcBFuIIllyQCSBzdbGC7CDSSx4yaA5MHNFoaLcIMwliUDSAbcbGG4mFCMi7AsGYDZOrrOallVPaulEBbN9zfhBgCQtLjZwnnRfH9b6tlSAABnYQ8oDAVzbgAAgK3QcwOgX2x9D8CKCDcALsLW9wCsjGEpABcZ6DljAJDsCDcAIrD1PQCrI9wgbpr9ndrfeJwvQ4th63sAVsecG8Qc8zWsja3vAVgdPTeIOeZrWBtb3wOwOsINYor5GvbAc8YAWBnDUoipwczX4M4/efS3j403I1U7lxSx9T0ASyLcIKaYr2ENg50Xxdb3AKyIYSnEFPM1rIF5UQDsjHCDmGO+RnJjXhQAu2NYCjHHfI3kluh5UTyfCkCiEW4QN8zXSE6JmhfFfkcAzMKwFOAwiZoXxbweAGYh3CDp8RiH2Iv3vCjm9QAwE8NSSFoMa8RPvOdFsd8RADPRc4OkxbBG/E30jdCsydkxDxrsdwTATIQbJCWGNayN/Y4AmIlwg6Q0mGENJDf2OwJgFubcICkxrGF97HcEwCyEGySl88MatU2BiKEpt8ul0nwfX5IWwn5HABKNYSkkLYY1AABDQc8NkhbDGgCAoSDcIOkxrAHA7ngGW2wRbgAAMAmblcYHc24AADAJm5XGB+EGAAATsFlp/BBuAAAwAZuVxg9zbpIYE8wAOJFTPvvYrDR+CDdJiAlmAJzIaZ99bFYaPwxLJaHBTDBr9ndqf+NxxmQB2IYTJ9eyWWl80HOTZM5PMLvQ+Qlmfzj2mTb85rBj7mwAOMOlPvtaAiFb9mSwWWl80HMTR0PpXbnUBLOVr/3RcXc2AOzP6ZNrJ/pGaNbkbIJNjNBzEwfDGTe+1ASzP34avKjN7nc2AOyPybWIJXpu4mA448bnJ5i5Xa6IdrfLpSkTMgc81+53NgDsa6DPvpkFWdy4ISqEmxiLxaZM/U0w+8m8KQOex50NACtjci1ihWGpGBvMuPGl7kAGmmCW6GWDTtlvAoD5mFyLWCHcxFgsx437ehp2ZXmhllXVR8znicedjdP2mwCQPPr67AOiQbiJsXhvypSoO5uB5g3tXFIU858HAECsMOcmDhIxbhzPZYM8zA0AYGX03MSB1ceNYzFvCAAAsxBu4siq48bsNwEAsDKGpXAR9psAAFgZ4QZ9Yr8JAIBVMSyFPll93hAAwLkINxiQVecNAQCci2EpAABgK4QbAABgK4QbAABgK6aHmy1btigvL0/p6ekqLi7WwYMHBzz+1KlTWrp0qcaNGyePx6NrrrlGe/fuTVC1AAAg2Zk6oXj37t2qqKjQ1q1bVVxcrE2bNmn27NlqbGxUdnb2Rcd3d3fr7//+75Wdna1XX31VEyZM0JEjR3TFFVckvngAAJCUXIZxwQOEEqi4uFi33HKLNm/eLEnq7e1Vbm6uli1bpieeeOKi47du3ap/+7d/00cffaTU1KE9mToYDMrr9aqjo0OZmZnDqh8AACRGNN/fpg1LdXd369ChQyorK/uimJQUlZWVqa6urs9zfv3rX6ukpERLly5VTk6OpkyZorVr16qnp6ffn3PmzBkFg8GIFwAAsC/Twk0gEFBPT49ycnIi2nNyctTW1tbnOc3NzXr11VfV09OjvXv3atWqVdqwYYN+/OMf9/tz1q1bJ6/XG37l5ubG9PcAAADJxfQJxdHo7e1Vdna2nn/+eU2bNk3z58/XypUrtXXr1n7PWbFihTo6OsKvY8eOJbBiAACQaKZNKPb5fHK73Wpvb49ob29v19ixY/s8Z9y4cUpNTZXb7Q63XXfddWpra1N3d7fS0tIuOsfj8cjj8cS2eAAAkLRM67lJS0vTtGnTVF1dHW7r7e1VdXW1SkpK+jyntLRUTU1N6u3tDbd9/PHHGjduXJ/BBgAAOI+pw1IVFRXatm2bXn75ZX344Yd66KGHFAqFtHjxYknSwoULtWLFivDxDz30kE6ePKmHH35YH3/8sfbs2aO1a9dq6dKlZv0KAAAgyZi6z838+fPl9/u1evVqtbW1aerUqdq3b194kvHRo0eVkvJF/srNzdUbb7yhRx55RDfeeKMmTJighx9+WI8//rhZvwISoNnfqSMnu3gyOQBgUEzd58YM7HNjHae6urW8qkE1h/3htpkFWaosL5Q3Y2j7HAEArMkS+9wAl7K8qkG1TYGIttqmgJZV1ZtUEQDACgg3Jmj2d2p/43G1BEJml5K0mv2dqjnsV88FHYs9hqGaw36uHfA3fJ4AFzN1zo3TMMwyeEdOdg34fuuJEPNv4Gh8ngD9o+cmgRhmGbyrxmQM+H7elQQbOBufJ0D/CDcJwjBLdCZljdTMgiy5Xa6IdrfLpZkFWfTawNH4PAEGRrhJkMEMsyBSZXmhSvN9EW2l+T5VlheaVBGQHPg8AQbGnJsEYZglet6MVO1cUqSWQEitJ0LscwP8DZ8nwMDouUkQhlmGbqJvhGZNzuYaAX/D5wkwMMJNAjHMAiBW+DwB+scOxSZgmAVArPB5AqeI5vubOTcmmOjjQwhAbPB5AlyMYSkAAGArhBsAAGArhBsAAGArhBsAAGArhBsAAGArhBsAAGArLAUHbKLZ36kjJ7vY7wSA4xFuAIs71dWt5VUNqjnsD7fNLMhSZXmhvBmpJlYGIJa4gRk8wg1gccurGlTbFIhoq20KaFlVvXYuKTKpKgCxwg1M9JhzA1hYs79TNYf96rngKSo9hqGaw361BEImVQYgVga6gUHfCDeAhR052TXg+60nCDeAlXEDMzSEG9hGs79T+xuPO+of+1VjMgZ8P+9KxuUBK+MGZmiYcwPLc/J49KSskZpZkKXapkDEnZ3b5VJpvo9Jh4DFcQMzNPTcwPKcPh5dWV6o0nxfRFtpvk+V5YUmVQQgVs7fwLhdroh2t8ulmQVZ3MD0g54bWNr58egLfXk82u7/+L0Zqdq5pEgtgZBaT4RYJgrYTGV5oZZV1Ud81nEDMzDCDSxtMOPRTvmin+gj1AB2xA1M9Ag3sDTGowE4BTcwg8ecG1ga49EAgAsNKdycOHEi/L+PHTum1atX69FHH9V///d/x6wwYLCYUAsA+DKXYVywM9AA3n//fc2dO1fHjh1TQUGBdu3apTvvvFOhUEgpKSkKhUJ69dVXNW/evDiWPDzBYFBer1cdHR3KzMw0uxzEEOPRAGBf0Xx/R9Vz89hjj+mGG25QTU2N7rjjDv3DP/yD5syZo46ODn322Wf67ne/q/Xr1w+reGCoJvpGaNbkbIINADhcVD03Pp9Pb731lm688UZ1dnYqMzNT7777rqZNmyZJ+uijj/R3f/d3OnXqVLzqHTZ6bgAAsJ5ovr+jWi118uRJjR07VpI0cuRIjRgxQqNHjw6/P3r0aJ0+fXoIJQPmavZ36sjJLoa0AMAGol4K7rpgVcqFfwasxMmPbgAAu4o63Nx7773yeDySpM8//1wPPvigRoz4653umTNnYlsdEGcDPbph55Iik6oCAAxHVOFm0aJFEX++5557Ljpm4cKFw6sISBAe3QAA9hRVuHnxxRfjVQeQcDy6AQDsiR2K4Vg8ugEA7IlwA8fi0Q0AYE+EGzgaj24AAPvhqeBwNG9GqnYuKeLRDQBgI4QbQH99dAOhBgDsgWEpAABgK4QbAABgK4QbAABgK4QbAABgK4QbAABgK4QbAABgK4QbAABgK4QbAABgK4QbAABgK4QbAABgK4QbAABgK4QbAABgK4QbAABgKzwVHPiSZn+njpzsUt6VPCUcAKyKcANIOtXVreVVDao57A+3zSzIUmV5obwZqSZWBgCIVlIMS23ZskV5eXlKT09XcXGxDh48OKjzdu3aJZfLpXnz5sW3QNje8qoG1TYFItpqmwJaVlVvUkUAgKEyPdzs3r1bFRUVWrNmjd577z3ddNNNmj17to4fPz7gea2trfrBD36g2267LUGVwq6a/Z2qOexXj2FEtPcYhmoO+9USCJlUGQBgKEwPNxs3btT999+vxYsX6/rrr9fWrVuVkZGhHTt29HtOT0+PvvOd7+hHP/qRJk2alMBqYUdHTnYN+H7rCcINAFiJqeGmu7tbhw4dUllZWbgtJSVFZWVlqqur6/e8p59+WtnZ2VqyZMklf8aZM2cUDAYjXsCXXTUmY8D3865kYjEAWImp4SYQCKinp0c5OTkR7Tk5OWpra+vznLffflvbt2/Xtm3bBvUz1q1bJ6/XG37l5uYOu27Yy6SskZpZkCW3yxXR7na5NLMgi1VTSJhmf6f2Nx5nKBQYJtOHpaJx+vRpLViwQNu2bZPP5xvUOStWrFBHR0f4dezYsThXCSuqLC9UaX7k36nSfJ8qywtNqghOcqqrWwu3H9TXN/xOi198V7OeO6CF2w+qo+us2aUBlmTqUnCfzye326329vaI9vb2do0dO/ai4//0pz+ptbVVc+fODbf19vZKki677DI1Njbq6quvjjjH4/HI4/HEoXrYiTcjVTuXFKklEFLriRD73CChBlqtt3NJkUlVAdZlas9NWlqapk2bpurq6nBbb2+vqqurVVJSctHx1157rd5//301NDSEX9/61rc0a9YsNTQ0MOSEYZvoG6FZk7MJNkgYVusBsWf6Jn4VFRVatGiRpk+frqKiIm3atEmhUEiLFy+WJC1cuFATJkzQunXrlJ6erilTpkScf8UVV0jSRe0AYAWDWa1H2AaiY3q4mT9/vvx+v1avXq22tjZNnTpV+/btC08yPnr0qFJSLDU1CAAGjdV6QOy5DOOCvlCbCwaD8nq96ujoUGZmptnlYIh4BhTsZOH2g6ptCkQMTbldLpXm+5hzA/xNNN/fpvfcANHgGVCwo8ryQi2rqo/4e81qPWDo6LmBpXCHCztjtR7QP3puYEvnV5Vc6MurSvhCgJVN9BFqgFhgpi4sg2dAAQAGg3ADy2BVCQBgMAg3sAyeAQUAGAzCDSyFZ0ABAC6FCcWwFJ4BBQC4FMINLIlVJQCA/jAsBQAAbIVwAwAAbIVwAwAAbIVwAwAAbIVwAwAAbIVwAwAAbIVwAwAAbIVwAwAAbIVN/ACLavZ36sjJLnZpBoALEG4AiznV1a3lVQ2qOewPt80syFJleaG8GakmVgYAyXHjRbgBLGZ5VYNqmwIRbbVNAS2rqtfOJUUmVQXA6ZLpxos5N4CFNPs7VXPYrx7DiGjvMQzVHParJRAyqTIATjfQjVeiEW4ACzlysmvA91tPEG4AJF6y3XgRbgALuWpMxoDv513JxGIAiZdsN16EG8BCJmWN1MyCLLldroh2t8ulmQVZrJoCYIpku/Ei3AAWU1leqNJ8X0Rbab5PleWFJlUEwOmS7cbLZRgXDJDZXDAYlNfrVUdHhzIzM80uBxiylkBIrSdC7HMDICl0dJ3Vsqr6uK2Wiub7m3ADAABiJl43XtF8f7PPDQAAuKTBbs430Wd+bzLhBgAA9CuZNucbLCYUAwCAfiXT5nyDRbgBAAB9SrbN+QaLcAMAAPqUbJvzDRbhBgAA9CnZNucbLMINAADoU7JtzjdYhBsAANAvK+6KzlJwAADQL29GqnYuKbLUruiEGwAAcEnJsDnfYBFuAGAYBrtrK4DEIdwAwBBYcddWwCmYUAwAQ2DFXVsBpyDcAECUrLprK+AUhBsAiJJVd20FnIJwAwBRsuqurYBTEG4AIEpW3bUVcArCDQAMgRV3bQWcgqXgADAEVty1FXAKwg0ADIOVdm0FnIJhKQAAYCuEGwAAYCuEGwAAYCuEGwAAYCuEGwAAYCuEGwAAYCuEGwAAYCuEGwAAYCuEGwAAYCuEGwAAYCuEGwAAYCtJEW62bNmivLw8paenq7i4WAcPHuz32G3btum2227T6NGjNXr0aJWVlQ14PAAAcBbTw83u3btVUVGhNWvW6L333tNNN92k2bNn6/jx430ef+DAAZWXl2v//v2qq6tTbm6uvvGNb+iTTz5JcOUAACAZuQzDMMwsoLi4WLfccos2b94sSert7VVubq6WLVumJ5544pLn9/T0aPTo0dq8ebMWLlx4yeODwaC8Xq86OjqUmZk57PoBAED8RfP9bWrPTXd3tw4dOqSysrJwW0pKisrKylRXVzeo/0ZXV5fOnj2rMWPG9Pn+mTNnFAwGI16AnTT7O7W/8bhaAiGzSwGApHCZmT88EAiop6dHOTk5Ee05OTn66KOPBvXfePzxxzV+/PiIgPRl69at049+9KNh1wokm1Nd3Vpe1aCaw/5w28yCLFWWF8qbkWpiZQBgLtPn3AzH+vXrtWvXLr322mtKT0/v85gVK1aoo6Mj/Dp27FiCqwTiY3lVg2qbAhFttU0BLauqN6mi4aMXCkAsmNpz4/P55Ha71d7eHtHe3t6usWPHDnjuc889p/Xr1+u3v/2tbrzxxn6P83g88ng8MakXSBbN/s6IHpvzegxDNYf9agmENNE3woTKhqavXqhb8kbrhYW30AsFIGqm9tykpaVp2rRpqq6uDrf19vaqurpaJSUl/Z737LPP6plnntG+ffs0ffr0RJQKJJUjJ7sGfL/1hLV6Pv7aCxUZ1t5t/Ux3PLdfHV1nTaoKgFWZPixVUVGhbdu26eWXX9aHH36ohx56SKFQSIsXL5YkLVy4UCtWrAgf/6//+q9atWqVduzYoby8PLW1tamtrU2dnZ1m/QpAwl01JmPA9/OutE6vzfleqJ4+1m1+1nVW9738buKLAmBppg5LSdL8+fPl9/u1evVqtbW1aerUqdq3b194kvHRo0eVkvJFBvvZz36m7u5u/dM//VPEf2fNmjX64Q9/mMjSAdNMyhqpmQVZqm0KqOdLuzm4XS6V5vssNSR1qV6od498ZrlhNgDmMn2fm0RjnxvYRUfXWS2rqrf8aqlmf6e+vuF3Ax7z4uJbNGtydoIqApCMovn+Nr3nBsDQeDNStXNJkVoCIbWeCCnvyhGW7N2YlDVSt+SN1rutn/V7jJWG2WBdzf5OHTnZZdl/S/gC4QawuIk+638Qv7DwFt3x3H59dsHk4RRJtxZkWf73Q3Jjzyj7MX1CMQB4M1J14AezdMtVoyPab/3bFwwQT3bcM8rp6LkBkBS8Gan65UMzLD/MBmux255R+CvCDYCkYodhNljHYPaM4u+j9TAsBQBwLDvtGYUvEG4AAI51fs8ot8sV0e52uTSTyeyWRbgBADhaZXmhSvN9EW2l+T4ms1sYc24AAI5mlz2j8AXCDQAAYjK7nTAsBQAAbIVwAwAAbIVwAwAAbIVwAwAAbIVwAwAAbIVwAwAAbIVwAwAAbIVwAwAAbIVN/GKo2d+pIye72N0SAAATEW5i4FRXt5ZXNajmsD/cNrMgS5XlhfJmpJpYGQAAzsOwVAwsr2pQbVMgoq22KaBlVfUmVQQAgHMRboap2d+pmsN+9RhGRHuPYajmsF8tgZBJlQEA4EyEm2E6crJrwPdbTxBuAABIJMLNMF01JmPA9/OuZGIxAACJRLgZpklZIzWzIEtulyui3e1yaWZBFqumAABIMMJNDFSWF6o03xfRVprvU2V5oUkVAQDgXCwFjwFvRqp2LilSSyCk1hMh9rkBAMBEhJsYmugj1AAAYDaGpQAAgK0QbgAAgK0QbgAAgK0QbgAAgK0woRgA4qTZ36kjJ7tYQQkkGOEGAGLsVFe3llc1qOawP9w2syBLleWF8makmlgZ4AwMSwFAjC2valBtUyCirbYpoGVV9SZVBDgL4QYAYqjZ36maw371GEZEe49hqOawXy0BHqYLxBvhBgBi6MjJrgHfbz1BuAHijXADADF01ZiMAd/Pu5KJxUC8EW6AKDX7O7W/8TjDC+jTpKyRmlmQJbfLFdHudrk0syCLVVNAArBaChgkVsBgsCrLC7Wsqj7i70ppvk+V5YUmVgU4h8swLpj1ZnPBYFBer1cdHR3KzMw0uxxYyMLtB1XbFIiYKOp2uVSa79POJUUmVoZk1RIIqfVEiH1ugBiI5vubnhtgEM6vgLnQl1fAWO3Liw3m4m+ij2sLmIFwAwzCYFbAWOVLjOG15EXgBGKDcAMMgp1WwAy0wRzDa+YgcAKxxWopYBCSaQXMcFZrscFccmJHYyC26LkBBsnsFTCxuLu30/CaXdhxPhdgNsINMEjejFTtXFJk2gqYWAwn2Wl4zS4InEDsMSwFRGmib4RmTc5O+FBULIaTkml4DX9F4ARij3CDpMQuwJFi+byiyvJCleb7ItrYYM48BE4g9hiWQlJh1UjfYnl3b/bwGi5m9nwuwG7YoRhJhV2A+8e1sT8CJ9C/aL6/GZZC0mCZ8sAYTrI/M+ZzAXbEsBSSBqtGBsZwEgAMDuEGSSOeq0bstK09zysCgIERbpA0zq8a6W9eyVC+0JmgDADOw5wbJJVYzythW3t7MGtrALYkAKyJnhsklVjOK2Fbe+szq+eNHr/4sdMQMZIX4QZJKRbzSpigbH1mPcGcJ6fHHoERiZQUw1JbtmxRXl6e0tPTVVxcrIMHDw54/C9/+Utde+21Sk9P1w033KC9e/cmqFJYCdvaW5tZWwOwJUF8MESMRDI93OzevVsVFRVas2aN3nvvPd10002aPXu2jh8/3ufx77zzjsrLy7VkyRLV19dr3rx5mjdvnv74xz8muHIkO7a1t7ZYPnLCCj/XzgiMSDTTw83GjRt1//33a/Hixbr++uu1detWZWRkaMeOHX0e/x//8R+688479eijj+q6667TM888o5tvvlmbN29OcOWwAja+sy6zet7o8Ys9AiMSzdQ5N93d3Tp06JBWrFgRbktJSVFZWZnq6ur6PKeurk4VFRURbbNnz9brr7/e5/FnzpzRmTNnwn8OBoPDLxyWwcZ31hWPrQGS+efaGYERiWZqz00gEFBPT49ycnIi2nNyctTW1tbnOW1tbVEdv27dOnm93vArNzc3NsXDUtjW3prM6nmjxy+2GCJGotl+tdSKFSsienqCwSABB7AIs3re6PGLPZ58jkQyNdz4fD653W61t7dHtLe3t2vs2LF9njN27Niojvd4PPJ4PLEpGIApzHrkBI+6iB0CIxLJ1GGptLQ0TZs2TdXV1eG23t5eVVdXq6SkpM9zSkpKIo6XpDfffLPf4wEAyYMhYiSC6cNSFRUVWrRokaZPn66ioiJt2rRJoVBIixcvliQtXLhQEyZM0Lp16yRJDz/8sG6//XZt2LBBc+bM0a5du/T73/9ezz//vJm/BgAASBKmh5v58+fL7/dr9erVamtr09SpU7Vv377wpOGjR48qJeWLDqYZM2boF7/4hZ566ik9+eSTKigo0Ouvv64pU6aY9SsAAIAk4jKMC3ZVsrlgMCiv16uOjg5lZmaaXQ4AABiEaL6/Td/EDwAAIJYINwAAwFYINwAAwFYINwAAwFYINwAAwFYINwAAwFYINwAAwFZM38Qv0c5v6xMMBk2uBAAADNb57+3BbM/nuHBz+vRpSeLJ4AAAWNDp06fl9XoHPMZxOxT39vbq008/1ahRo+RyuYb83wkGg8rNzdWxY8fY6TgBuN6Jw7VOLK53YnG9EyuW19swDJ0+fVrjx4+PeCxTXxzXc5OSkqKvfOUrMfvvZWZm8g8kgbjeicO1Tiyud2JxvRMrVtf7Uj025zGhGAAA2ArhBgAA2ArhZog8Ho/WrFkjj8djdimOwPVOHK51YnG9E4vrnVhmXW/HTSgGAAD2Rs8NAACwFcINAACwFcINAACwFcINAACwFcLNALZs2aK8vDylp6eruLhYBw8eHPD4X/7yl7r22muVnp6uG264QXv37k1QpfYQzfXetm2bbrvtNo0ePVqjR49WWVnZJf//wRei/bt93q5du+RyuTRv3rz4Fmgz0V7vU6dOaenSpRo3bpw8Ho+uueYaPk+iEO313rRpkyZPnqzLL79cubm5euSRR/T5558nqFprq6mp0dy5czV+/Hi5XC69/vrrlzznwIEDuvnmm+XxeJSfn6+XXnop9oUZ6NOuXbuMtLQ0Y8eOHcb//u//Gvfff79xxRVXGO3t7X0eX1tba7jdbuPZZ581PvjgA+Opp54yUlNTjffffz/BlVtTtNf77rvvNrZs2WLU19cbH374oXHvvfcaXq/X+L//+78EV2490V7r81paWowJEyYYt912m/GP//iPiSnWBqK93mfOnDGmT59u3HXXXcbbb79ttLS0GAcOHDAaGhoSXLk1RXu9f/7znxsej8f4+c9/brS0tBhvvPGGMW7cOOORRx5JcOXWtHfvXmPlypXGr371K0OS8dprrw14fHNzs5GRkWFUVFQYH3zwgVFZWWm43W5j3759Ma2LcNOPoqIiY+nSpeE/9/T0GOPHjzfWrVvX5/Hf/va3jTlz5kS0FRcXG9/97nfjWqddRHu9L3Tu3Dlj1KhRxssvvxyvEm1jKNf63LlzxowZM4wXXnjBWLRoEeEmCtFe75/97GfGpEmTjO7u7kSVaCvRXu+lS5caX//61yPaKioqjNLS0rjWaUeDCTePPfaY8bWvfS2ibf78+cbs2bNjWgvDUn3o7u7WoUOHVFZWFm5LSUlRWVmZ6urq+jynrq4u4nhJmj17dr/H4wtDud4X6urq0tmzZzVmzJh4lWkLQ73WTz/9tLKzs7VkyZJElGkbQ7nev/71r1VSUqKlS5cqJydHU6ZM0dq1a9XT05Oosi1rKNd7xowZOnToUHjoqrm5WXv37tVdd92VkJqdJlHflY57cOZgBAIB9fT0KCcnJ6I9JydHH330UZ/ntLW19Xl8W1tb3Oq0i6Fc7ws9/vjjGj9+/EX/aBBpKNf67bff1vbt29XQ0JCACu1lKNe7ublZb731lr7zne9o7969ampq0ve+9z2dPXtWa9asSUTZljWU63333XcrEAjo1ltvlWEYOnfunB588EE9+eSTiSjZcfr7rgwGg/rLX/6iyy+/PCY/h54bWN769eu1a9cuvfbaa0pPTze7HFs5ffq0FixYoG3btsnn85ldjiP09vYqOztbzz//vKZNm6b58+dr5cqV2rp1q9ml2dKBAwe0du1a/fSnP9V7772nX/3qV9qzZ4+eeeYZs0vDMNBz0wefzye326329vaI9vb2do0dO7bPc8aOHRvV8fjCUK73ec8995zWr1+v3/72t7rxxhvjWaYtRHut//SnP6m1tVVz584Nt/X29kqSLrvsMjU2Nurqq6+Ob9EWNpS/2+PGjVNqaqrcbne47brrrlNbW5u6u7uVlpYW15qtbCjXe9WqVVqwYIHuu+8+SdINN9ygUCikBx54QCtXrlRKCn0AsdTfd2VmZmbMem0kem76lJaWpmnTpqm6ujrc1tvbq+rqapWUlPR5TklJScTxkvTmm2/2ezy+MJTrLUnPPvusnnnmGe3bt0/Tp09PRKmWF+21vvbaa/X++++roaEh/PrWt76lWbNmqaGhQbm5uYks33KG8ne7tLRUTU1N4RApSR9//LHGjRtHsLmEoVzvrq6uiwLM+WBp8OjFmEvYd2VMpyfbyK5duwyPx2O89NJLxgcffGA88MADxhVXXGG0tbUZhmEYCxYsMJ544onw8bW1tcZll11mPPfcc8aHH35orFmzhqXgUYj2eq9fv95IS0szXn31VePPf/5z+HX69GmzfgXLiPZaX4jVUtGJ9nofPXrUGDVqlPH973/faGxsNP7rv/7LyM7ONn784x+b9StYSrTXe82aNcaoUaOMqqoqo7m52fjNb35jXH311ca3v/1ts34FSzl9+rRRX19v1NfXG5KMjRs3GvX19caRI0cMwzCMJ554wliwYEH4+PNLwR999FHjww8/NLZs2cJS8ESrrKw0vvrVrxppaWlGUVGR8T//8z/h926//XZj0aJFEce/8sorxjXXXGOkpaUZX/va14w9e/YkuGJri+Z6X3XVVYaki15r1qxJfOEWFO3f7S8j3EQv2uv9zjvvGMXFxYbH4zEmTZpk/OQnPzHOnTuX4KqtK5rrffbsWeOHP/yhcfXVVxvp6elGbm6u8b3vfc/47LPPEl+4Be3fv7/Pz+Lz13jRokXG7bffftE5U6dONdLS0oxJkyYZL774YszrchkG/W4AAMA+mHMDAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADwDbq6urkdrs1Z84cs0sBYCIevwDANu677z6NHDlS27dvV2Njo8aPH292SQBMQM8NAFvo7OzU7t279dBDD2nOnDl66aWXzC4JgEkINwBs4ZVXXtG1116ryZMn65577tGOHTtExzTgTIQbALawfft23XPPPZKkO++8Ux0dHfrd735nclUAzMCcGwCW19jYqClTpuiTTz5Rdna2JOn73/++Ojo69J//+Z8mVwcg0S4zuwAAGK7t27fr3LlzEROIDcOQx+PR5s2b5fV6TawOQKIxLAXA0s6dO6edO3dqw4YNamhoCL/+8Ic/aPz48aqqqjK7RAAJxrAUAEt7/fXXNX/+fB0/fvyiHprHH39cb731lt59912TqgNgBsINAEubO3euent7tWfPnoveO3jwoIqLi/WHP/xBN954ownVATAD4QYAANgKc24AAICtEG4AAICtEG4AAICtEG4AAICtEG4AAICtEG4AAICtEG4AAICtEG4AAICtEG4AAICtEG4AAICtEG4AAICt/D9dNJD+fpIezwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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AwewZ88e9OrVC4MHD8bixYvx7bff4o033gAAPPLII1i7di1++9vf4qGHHsJHH32Ev/71rygrK1PqJQD44QOuoLRAshy0+QOu4P9rewjT45kud1dVK5oPVy3dCZNyzF3N8Cz0oLquGv5j/oSWZpDzuRJJb1NsiZKd3TPi4zk58V/+n5OTA4PBgH379knas7KyAKDVWYu2pq/a0ryBqCheGpFS41RTLBQdufniiy8wZswYjBkzBgBQVFSEMWPGYPny5QCAo0eP4tChQy3HDx06FGVlZfjwww8xatQoPP/88/jjH/+oeI2b5g844RkB5b8sh/CMAM9CD45/K8o+hKlV/HCleLNarJgyYooswYacz5UIeppiSySbrReczkyYTNIcF5PJAKczE1Zr/IOb3r17484778TatWvR0NDQrt+Rm5uLzz77TNL22WefYdiwYQB+2KwS+OE7t9nlycWX+/vf/97y36FQCIIgIDc3t139SiRFR24mT54siRSv1Fr14cmTJ2P37t0J7FX7WS1WyYdANEOYifjHkAiCEERNzUnk5JgT0ufmD1dflU8yNWUymuDIdfDDlSjBIo1A0yVu91QUFGyF11vb0uZwDIHbPTVhz/nSSy9h0qRJGDduHFasWIGRI0fCaDTi888/xzfffIOxY8dGPP/xxx/H/fffjzFjxsDhcOD999/H5s2bW5aQd+nSBTfffDNWr16NoUOH4tixY1i6dGmrv+upp55C7969YbFYsGTJEvTp0wfTpk1r87kDgQACgUDLLM3evXvRvXt3DB48GL169WrfBYmGmGROnTolAhBPnTqV8Ofat+87EfjPNn8EIZjwPnTUd9+dEZ3OdyT9djrfEYPBs3F/ruD3QdH5X04RP0PLj/O/nGLwe/VfJyK9EAKCWP6vclEICEp3Je7Onj0rfv311+LZsx3//BKEoFheXiPb5/iRI0fERx99VBw6dKjYuXNnsVu3buL48ePF//zP/xQbGhpajgMgbtmy5arzX3rpJTErK0vs3LmzaLPZxDfeeEPy+Ndffy1OnDhR7NKlizh69Gjxgw8+EAGIH3/8sSiKovjxxx+LAMT3339fHD58uJiSkiKOHz9e/Oc//xmx38XFxSKAq37+9Kc/tXp8pPcolu9vw/9ejKRRX1+PHj164NSpU3FfOdUal2sTfL6Dkqkpk8kAh2OIJnJulOi/1vMXiJKV2regOXfuHA4cOIChQ4ciLS1N6e5oyrZt23D77bcjFAqhZ8+eCXueSO9RLN/fik5LJQMlhjDjpXnZ45UuzxlKxBTVldN7RKRu3GOL1IbBTYKZzWnweKajujoEvz+UsJyVRNBTzpDaqf2OlyiSSDWqPAs9CvWKkhmDG5lYrdoJapopsewx2fCOl7SuuUbVlS6vUcWAXfuutQBIbTRVxI/kpcSyx2TDqsykdSwASGrE4IYicrunwuEYImnTSs6Q2rEqM+kBa1SRGnFaiiLScs6Q2rEqM+kBa1SRGnHkhqJitZoxZUoWA5s44h0v6YVe9tgi/eDIDZFCeMdLeqGXPbZIPzhyQ6Qg3vGSnmh9jy3SDwY3RApqa9NVLgOnRBECAir2VjBhXWMCgQAWLFiAnJwcpKWlwWKxYNKkSVi/fj3OnDmjdPdaFQwG8dhjj8Fut6NLly4YPHgwfvnLX+LUqVMJf25OSxGpAKsyU6KxppJ27d+/H5MmTULPnj2xcuVKjBgxAqmpqdi7dy9eeeUVDBo0CPfcc0+r5164cAGdO3eWucc/OHLkCI4cOYI1a9Zg2LBhOHjwIB555BEcOXIEmzZtSuhzc+SGiCgJsKZSfMk5AjZv3jx06tQJX3zxBe6//37k5uYiKysL9957L8rKypCfn99yrMFgwPr163HPPfega9euePbZZwEA69evR3Z2NlJSUmC32/HnP/+55Zza2loYDAbs2bOnpe3kyZMwGAzYtm0bgB/2ljIYDCgrK8PIkSORlpaGm2++GV9++WWb/b7xxhvx3//938jPz0d2djbuuOMOPPvss3j//fdx8eLF+F6kKzC4ISLSOdZUip9gQxCuEhfsy+zIezEPtqU2uEpcCDWEEvJ83333HT744APMnz8fXbt2bfUYg0FaaHXFihX4yU9+gr179+Khhx7Cli1bsGDBAvz617/Gl19+iZ///OeYPXs2Pv7445j78/jjj+P555/H559/jr59+yI/Px8XLlyI+vzmTS87dUrsxBGDGyIijROEICoq9qO6uvUvWFYRjh+5R8D8fj9EUYTdbpe09+nTB926dUO3bt3wxBNPSPtYWIjZs2cjKysLgwcPxpo1a/Dggw9i3rx5sNlsKCoqwn333Yc1a9bE3J/i4mLceeedGDFiBF5//XXU1dVhy5YtUZ174sQJPP3003j44Ydjft5YMbghItKoYPAsXK5NsNs3IC9vM2y2V+FybUIodE5yHGsqxYeaRsB27NiBPXv2YPjw4Th//rzksXHjxkn+v6qqCpMmTZK0TZo0CVVVVTE/78SJE1v+u1evXrDb7VH9nvr6etx9990YNmwYVqxYEfPzxorBDRGRRhUWlsHnOyhp8/kOoqBgq6StuaaSyWiStJuMJjiHO5nMHiUlRsBycnJgMBiwb98+SXtWVhZycnLQpUuXq85pa/qqLUbjD6HA5RtjxjLVdC2nT5+Gy+VC9+7dsWXLFlkSnBncEBFpkCAE4fXWIhyW7tQcDovwemuvmqJiTaWOU2IErHfv3rjzzjuxdu1aNDQ0tOt35Obm4rPPPpO0ffbZZxg2bBgAoG/fvgCAo0ePtjx+eXLx5f7+97+3/HcoFIIgCMjNzW3zuevr63HXXXchJSUF7733HtLS0tr1GmLFpeBERBpUU3My4uN+f0iyXQqrCHecUlXFX3rpJUyaNAnjxo3DihUrMHLkSBiNRnz++ef45ptvMHbs2IjnP/7447j//vsxZswYOBwOvP/++9i8eTN8vh9yh7p06YKbb74Zq1evxtChQ3Hs2DEsXbq01d/11FNPoXfv3rBYLFiyZAn69OmDadOmtXpsc2Bz5swZ/OUvf0F9fT3q6+sB/BBQmUymVs+LBwY3REQalJ3dM+LjOTmt165hTaWOcc91o6C0QFIvKNEjYNnZ2di9ezdWrlyJxYsX49///jdSU1MxbNgw/OY3v8G8efMinj9t2jT8/ve/x5o1a7BgwQIMHToUf/rTnzB58uSWYzZs2IA5c+Zg7NixsNvteO6553DXXXdd9btWr16NBQsWoLq6GqNHj8b777+PlJSUVp93165d+Mc//gHgh+m1yx04cACZmZmxXYgYGMTLJ9mSQH19PXr06NGyHI2IKN6EgICa4zUJHx1xuTbB5zsomZoymQxwOIbA45mesOfVqnPnzuHAgQMYOnRoh6dHkm0EbNu2bbj99tsRCoXQs2fPhD1PpPcolu9vjtwQ6YQgBFFTcxI5OWbu3q4QuasAu91TUVCwFV5vbUubwzEEbvfUuD8XSXEETN0Y3BBpXDB4FoWFZZIvOKczE273VJjN8iTv0Q8i1UDxLPTE/fnM5jR4PNNRXR2C3x9iYEv0v7haikjjol0OTImlZA0Uq9WMKVOyGNhQwkyePBmiKCZ0SiqeGNwQaVisy4EpcVgFmEg9GNwQaVg0y4Ep8QQhiH9Xtb5ipBmrAKtHkq2j0ZR4vTfMuSHSsPYuB6b4uCrfyWmD4Xo/RENTyzGJroFC0Wuuq9LY2NhqZV9SXmNjIwB0uAYOgxsiDbPZesHpzGxzOTBzMBLrqnynj38K8Y63gOsvlcpnFWD16NSpE6677jocP34cnTt3btl2gNShqakJx48fx3XXXdfhXcNZ54ZI40Khc1ctB+ZqqcQThCDs9g2tP5h+HKV/HYvbRo/hiI3KNDY24sCBA2hqarr2wSQ7o9GIoUOHtloYkHVuiJIIlwMrI2K+U31fDGoaB6slS7b+UHRSUlJgtVpbpj9IXVJSUuIyosbghkgnrFYGNXJivpN2GY1G2TZwJGVwwpGIqB2a851MJoOk3WQywOnMZKBJpCAGN0RE7eR2T4XDMUTSxu0PiJTHaSkionZivhOROjG4oaTGzSYpHpjvRKQuDG4oKXGzSSIi/WLODSUlbjZJRFojCEFUVOznnnFR4MiNCgkBATXHa5DTL4cFwBKgebPJK12+2SSnGIhILTjSHDuO3ChACAio2FuB6rpqSXuwIQhXiQv2ZXbkvZgH21Ibbv2PWxFqUCZK1+tdAjebJCIt4Uhz7DhyI6NgQxCFpYXwfuVtaXMOd8I91w1zVzMKSwvx4dcfSs751P8prEusqH62Guau8owm6P0ugcXXiEgrONLcPhy5kVFhaSF8VT5Jm6/Kh4LSAggBAd6vvGgSr97v5LuG73Dv2nvl6qbu7xJYfI2ItIIjze3D4EYmzcFLuCksaQ83heH9yotPqj+JeP7/+P/nqmmsRGi+S7h8h2lAepegByy+RkRawJHm9uG0lExqjtdEfDyazdn9x/wJTzCO5i5BbSMb7alVw+JrUqz3Q6ROzSPNPt9ByU2nyWSAwzGE/17bwOBGJtl9syM+Ptk+GT/O+TE+9X/a5jE5/XLi3a2raOkuIR65QclefE3v+VVEeuB2T0VBwVbJv1OONEfGaSmZ2Prb4BzuhMlokrSbjCY4hzthtVjx3qPvoXfX3lede/kxCe+nhvJR9J4bJAdeQyL1ax5pFoQ5KC+/D4IwBx7PdN6ARMDgRkbuuW44ch2SNkeuA+65bgCAuasZ1c9W49acW9s8RpZ+aiAfJVlygxJpx46jvIZEGmK1mjFlSpaqbjLVitNSMjJ3NcOz0IPqumr4j/lbLdJn7mrGJ098EvGYhPdTA/koWswNUptf/OLDiI/zGhKRVjG4UYDVYr1mwBLNMYmm5nwULeUGqZEgBLFr17GIx/AaklKY4E4dxeCGNIkrCDrmWiNfP/pRP15Dkh0T3ClemHOTIHrdukBNtJAbpFbXGvn6P//nLnk6QnQZJrhTvHDkJs545yEfLeQGqVVbI19GI3DnnZkYN66/gr2jZMRtBiieOHITZ7zzkB9XELRPayNfd96ZyZEvUgS3GaB44shNHPHOg7SEI1+kJlwkQPHEkZs44p0HaRFHvkgNtFRAlNSPwU0c8c6DiKj9uEiA4kXx4GbdunXIzMxEWloaJkyYgB07dkQ8vqSkBHa7HV26dEFGRgZ+9atf4dy5czL1NjLeeRARtR+3GaB4UTS4efvtt1FUVITi4mLs2rULo0aNgtPpxLFjrRcXe+utt7Bo0SIUFxejqqoKr776Kt5++208+eSTMve8bbzzICLqGE6VUkcZRFEUr31YYkyYMAE33XQT1q5dCwBoampCRkYGHnvsMSxatOiq4x999FFUVVWhsrKype3Xv/41/vGPf+DTT9veTfty9fX16NGjB06dOoX09PT4vJBWMEmTiIgofmL5/lZs5KaxsRE7d+6Ew3FpI0mj0QiHw4Ht27e3es4tt9yCnTt3tkxd7d+/H+Xl5cjLy2vzec6fP4/6+nrJjxx450FERKQMxZaCnzhxAuFwGBaLRdJusVjwzTfftHpOYWEhTpw4gR//+McQRREXL17EI488EnFaatWqVfjd734X175TYggBATXHaxTZLJSIiPRD8YTiWGzbtg0rV67ESy+9hF27dmHz5s0oKyvD008/3eY5ixcvxqlTp1p+Dh8+LGOPKRrBhiBcJS7Yl9mR92IebEttcJW4EGrg0nkiIoqdYiM3ffr0gclkQl1dnaS9rq4O/fu3Xvp92bJleOCBB/Czn/0MADBixAg0NDTg4YcfxpIlS2A0Xh2rpaamIjU1Nf4vgOKmsLQQviqfpM1X5UNBaQE8Cz0K9YqIiLRKsZGblJQUjB07VpIc3NTUhMrKSkycOLHVc86cOXNVAGMymQAACuZFUwcIAQHer7wIN4Ul7eGmMLxfeVFdV61Qz4iISKsU3X6hqKgIs2bNwrhx4zB+/HiUlJSgoaEBs2fPBgDMnDkTgwYNwqpVqwAA+fn5eOGFFzBmzBhMmDABfr8fy5YtQ35+fkuQQ9pSc7wm4uP+Y37m3xARUUwUDW5mzJiB48ePY/ny5QgEAhg9ejQ8Hk9LkvGhQ4ckIzVLly6FwWDA0qVL8e2336Jv377Iz8/Hs88+q9RLoA7K7psd8fGcfjky9YSIiPRC0To3SpCrzg1Fz1Xigq/KJ5maMhlNcOQ6mHNDRHHFVZnapYk6N0TN3HPdcOQ6JG2OXAfcc90K9YiI9IarMpMLR25INarrquE/5ucdFRHFHUeItS+W729Fc26ILme1WBnUxIEgBFFTc5JbfxD9r+ZVmVe6fFUmP3v0hcENkU4Eg2dRWFgGr7e2pc3pzITbPZW7KlNS46rM5MOcGyKdKCwsg893UNLm8x1EQcFWhXpEpA5clZl8GNwQ6YAgBOH11iIclqbQhcMivN5aVFczaZKSl62/Dc7hTpiM0npoJqMJzuFOjtroEIMbIh2oqTkZ8XG/n8ENJTeuykwuzLkh0oHs7J4RH8/JYWIxJTdzVzM8Cz1clZkkGNwQ6YDN1gtOZyZ8voOSqSmTyQCHYwhXTRH9L67KTA6cliLSCbd7KhyOIZI2h2MI3O6pCvWIKD4EIYiKiv3MHaOoceSGSCfM5jR4PNNRXR2C3x9inRvSPJY3oPZihWIiIlIll2tTm1OtHs90BXtGSuDeUkREpGksb0AdweCGiChJqTmXheUNqCOYc0O6w72ViCLTQi4LyxtQR3DkhnQjGDwLl2sT7PYNyMvbDJvtVbhcmxAKnVO6a0SqooWtOprLG5hMBkm7yWSA05nJGxeKiMEN6YYWPrCJlKalXBaWN6D24rQU6ULzB/aVLv/A5p0eUXS5LGr5t8LyBtReDG5IF7T0gU2kJC3mslitDGooNpyWIl3Q4gc2kRKYy0LJgMEN6QI/sImix1wW0jtWKCbdCIXOoaBgq6qXtxKpCXNZSEti+f5mcEO6ww9sIiL9ieX7mwnFpDtMPiQiSm7MuSEiIiJdYXBDREREusJpKSKiJCQEBNQcr0FOvxxYLValu0MUVwxuiIiSSLAhiMLSQni/8ra0OYc74Z7rhrlrcuaqMdDTH05LERElkcLSQviqfJI2X5UPBaUFCvVIOcGGIFwlLtiX2ZH3Yh5sS21wlbgQalDP/lrUPgxuiIiShBAQ4P3Ki3BTWNIebgrD+5UX1XXVCvVMGQz09IvBDRFRkqg5XhPxcf8xv0w9UR4DPX1jcENElCSy+2ZHfDynX45MPVEeAz19Y3BDRJQkbP1tcA53wmQ0SdpNRhOcw51JlUzLQE/fGNwQESUR91w3HLkOSZsj1wH3XLdCPVIGAz19495SRERJqLquGv5j/qRe/hxqCKGgtIDL4jWCG2dGwOCGiIgux0BPG7hxJhERUZSsFiuDGp1hzg0RERHpCkduiIiIVIzbQ8SOwQ0REZEKcR+w9uO0FBERkQpxe4j2Y3BDRESkMtweomMY3BAREakMt4foGObc6IAgBFFTcxI5OWZYrZyHTTZ8/4n0h9tDdAyDGw0LBs+isLAMXm9tS5vTmQm3eyrM5jTlOkay4PtPpF/N20P4qnySqSmT0QRHroOrpq6B01IaVlhYBp/voKTN5zuIgoKtCvWI5MT3n0jfuA9Y+3H7BY0ShCDs9g0RHp/DKQod4/tPesWaLlfj9hA/4PYLSaCm5mTEx/3+EL/cdIzvP+kNa7q0jdtDxI7TUhqVnd0z4uM5Ocn9YaB3fP9Jb1jTheKJwY1G2Wy94HRmwmQySNpNJgOczkzetesc33/SE9Z0oXhjcKNhbvdUOBxDJG0OxxC43VMV6hHJie8/6QVrulC8MedGw8zmNHg801FdHYLfH2KdkyTD95/0gjVdKN4Y3OiA1aqtLzWuhogvrb3/RFdiTReKN05LkWyCDUG4SlywL7Mj78U82Jba4CpxIdQQUrprRKQw1nSheGKdG5KNq8TV5p2ZZ6FHwZ4RkVqwpgu1hXVuSHWaV0Nc6fLVEPwgI63iVGv8aK2mC/d2UycGNySLaFZDaOkDjQhg4blkxr3d1E3xnJt169YhMzMTaWlpmDBhAnbs2BHx+JMnT2L+/PkYMGAAUlNTYbPZUF5eLlNvqb24GoL0iIXnkhf3dlM3RYObt99+G0VFRSguLsauXbswatQoOJ1OHDt2rNXjGxsbceedd6K2thabNm3Cvn37UFpaikGDBsncc4pV82oIk9EkaTcZTXAOd3LUhjSHheeSlyAE4fXWIhyWpqyGwyK83lpUV3ORhNIUDW5eeOEFzJ07F7Nnz8awYcPw8ssv47rrrsOGDa1vCLhhwwYEg0G8++67mDRpEjIzM3Hbbbdh1KhRbT7H+fPnUV9fL/khZXA1BOkJC88lr2j2diNlKRbcNDY2YufOnXA4Ln3ZGY1GOBwObN++vdVz3nvvPUycOBHz58+HxWLBjTfeiJUrVyIcDrd6PACsWrUKPXr0aPnJyMiI+2uh6Ji7muFZ6IHwjIDyX5ZDeEaAZ6GHuQkaIAhBVFTs5x3pZbQ41SoEBFTsreCoUgdxbzf1Uyyh+MSJEwiHw7BYLJJ2i8WCb775ptVz9u/fj48++gg//elPUV5eDr/fj3nz5uHChQsoLi5u9ZzFixejqKio5f/r6+sZ4ChMa6shkhmTJtuWqMJziVh9w8Tn+Gre283nOyiZmjKZDHA4hnDVlAoonlAci6amJvTr1w+vvPIKxo4dixkzZmDJkiV4+eWX2zwnNTUV6enpkh/SFo4aKIdJk5HFc6o1GDwLl2sT7PYNyMvbDJvtVbhcmxAKnetwP5n4HH/c203dFBu56dOnD0wmE+rq6iTtdXV16N+/f6vnDBgwAJ07d4bJdCkpNTc3F4FAAI2NjUhJSUlon0leHDVQVnPS5JUuT5pM9jvU5qnWeBSeixRIejzT291H1phKDO7tpm6KjdykpKRg7NixqKysbGlrampCZWUlJk6c2Oo5kyZNgt/vR1NTU0ubIAgYMGAAA5sYaGUkhKMGymLSZPSsFiumjJjSoamoRK2+YeJzYlmtZkyZksXARmUUnZYqKipCaWkpXn/9dVRVVeEXv/gFGhoaMHv2bADAzJkzsXjx4pbjf/GLXyAYDGLBggUQBAFlZWVYuXIl5s+fr9RL0JREDnvHG5daKo9Jk/JJZCCpxcRnoo5SNLiZMWMG1qxZg+XLl2P06NHYs2cPPB5PS5LxoUOHcPTo0ZbjMzIy4PV68fnnn2PkyJH45S9/iQULFmDRokVKvQRN0dJICEcNlNecNGkyGSTtJpMBTmcm71TjKJGBJGtMUTLixplJQhCCsNtbrx/0w+NzVPVlpbX+6lUodA4FBVuZ9yQDl2tTm6tvOpJzAwChhhAKSgu4Woo0jRtn0lWiGQlRU7DApZbqwKRJ+bjdU68KJOO1+iaeic9EWsCRmyShxZEQjhpQMmIgSdS6WL6/GdwkkUQOeycSP+yJiCiW729NFfGjjtFq0SkutSQiolgw5yaJMH+CiIiSAYObJGS1MqhJNkJAQM3xGiaSElFSYHBDpGPcMJGIkhFzboh0jBsmElEyYnBDpFPNGyaGm8KS9ss3TCQi0iMGN0Q6xQ0TiShZMbgh0ilumEhEyYrBDZFOccNEIkpWDG6IdMw91w1HrkPS5sh1wD3XrVCPiIgSj0vBiXSMGyYSUTJicEOUBKwWK4MaIkoanJYiIiIiXWFwQ0RERLrCaSkiUiVBCKKm5qTmN3jVy+sg0hIGN0SkKsHgWRQWlsHrrW1pczoz4XZPhdmcplzHYqSX10GkRZyWIiJVKSwsg893UNLm8x1EQcFWhXrUPnp5HURaxOCGiFRDEILwemsRDouS9nBYhNdbi+rqkEI9i41eXgeRVjG4ISLVqKk5GfFxv18bQYFeXgeRVjHnhohUIzu7Z8THc3K0kZCrl9dB8mMCenxw5IaIVMNm6wWnMxMmk0HSbjIZ4HRmaubDXi+vg+QTDJ6Fy7UJdvsG5OVths32KlyuTQiFzindNU2KObhpamrChg0bMHXqVNx4440YMWIE7rnnHrzxxhsQRfHav4CIKAK3eyocjiGSNodjCNzuqQr1qH308jpIHkxAjy+DGENEIooi8vPzUV5ejlGjRuGGG26AKIqoqqrC3r17cc899+Ddd99NYHc7rr6+Hj169MCpU6eQnp6udHeIqA3V1SH4/SHND8/r5XVQ4ghCEHb7hgiPz+HfDmL7/o4p5+a1117DJ598gsrKStx+++2Sxz766CNMmzYNb7zxBmbOnBl7r4lIlYSAgJrjNbJvumm16iMY0MvroMSJJgGdf0OxiWlayu1248knn7wqsAGAO+64A4sWLcKbb74Zt84RkXKCDUG4SlywL7Mj78U82Jba4CpxIdTAlT6JJghBVFTs55LxJMEE9PiLKbj517/+BZfL1ebjU6ZMwT//+c8Od4qIlFdYWghflU/S5qvyoaC0QKEe6R+TSpMTE9DjL6bgJhgMwmKxtPm4xWJBKMQ7DSKtEwICvF95EW4KS9rDTWF4v/Kiuq5aoZ7pG5NKkxcT0OMrppybcDiMTp3aPsVkMuHixYsd7hTpC+s2aE/N8ZqIj/uP+WXNv0kGzVWNr3R5VWP++9EvszkNHs90JqDHSUzBjSiKePDBB5Gamtrq4+fPn49Lp0gfuHGgdmX3zY74eE6/HJl6kjyYVEoAE9DjJabgZtasWdc8hiulqFmkIXaPZ7pCvaJo2Prb4BzuhK/KJ5maMhlNcOQ6OGqTAEwqJYqfmOrc6AHr3MhDC3UbOF0WWaghhILSAni/8ra0OYc74Z7rhrlrYq9Xsr43Ltcm+HwHJRtumkwGOBxDeENASS9hdW6IoqXmIXZOl0XH3NUMz0IPquuq4T/ml6XOTbK/N273VBQUbJW8fj0klSpVK4mSF0duKCHUPHLDu2P14nvzA70klQYbgigsLVRk9I/0J5bvb26cSQkRj7oNQkBAxd6KuC47bl6RcvmXJyBdkULK4HtzidVqxpQpWZoObADWSiLlMLihhGlv3YZEVsaNZrqMlMH3Rl9YK4mUxJwbSpj21m2IdLfnWejpUJ+4IkW9+N7oC2slkZI4ckMJF8sQe6Lv9vRU5lxv+w/p6b0h1koiZTG4IVWJ5m6vo7Re5lzP+w9p/b2hS5prJZmMJkm7yWiCc7iTozaUUFwtRaoiBATYl9nbfvwZIW4filpdkZIMK4q0+t6QlJK1kkh/Yvn+ZnBDquMqcbVZGbejOTdap+Yl9kRtkbNWEukXl4KTprnnuuHIdUjaHLkOuOe6FeqRenBFEWmR1WLFlBFTGNiQbLhailRHicq4WsEVRURE18bghlTLarEyqLlC84qitnJuOCVFRMRpKSLN4YoiIqLIOHJDpDHtLY5IRJQsGNyoBHfNpVhZrQxqiIhaw+BGYdw1l4iIKL6Yc6Mw7ppLREQUXwxuFMRdc4mIiOKPwY2C5NhHiYiIKNkwuFEQd80lIiKKPwY3CuKuuURERPHH4EZh3EcpNoIQREXFflRXcw8lIiJqnSqCm3Xr1iEzMxNpaWmYMGECduzYEdV5GzduhMFgwLRp0xLbwQRq3kdJeEZA+S/LITwjwLPQw2XgVwgGz8Ll2gS7fQPy8jbDZnsVLtcmhELnlO4aERGpjOLBzdtvv42ioiIUFxdj165dGDVqFJxOJ44dOxbxvNraWvzmN7/BrbfeKlNPE4u75kZWWFgGn++gpM3nO4iCgq0K9YiIiNRK8eDmhRdewNy5czF79mwMGzYML7/8Mq677jps2LChzXPC4TB++tOf4ne/+x2ysrJk7C0pQRCC8HprJRtFAkA4LMLrreUUFRERSSga3DQ2NmLnzp1wOC7lnBiNRjgcDmzfvr3N85566in069cPc+bMueZznD9/HvX19ZIfikwICKjYW6GaOjs1NScjPu73M7ghIqJLFN1+4cSJEwiHw7BYLJJ2i8WCb775ptVzPv30U7z66qvYs2dPVM+xatUq/O53v+toV5OCWreCyM7uGfHxnBzmJxER0SWKT0vF4vTp03jggQdQWlqKPn36RHXO4sWLcerUqZafw4cPJ7iX2qXWrSBstl5wOjNhMhkk7SaTAU5nJjePJCIiCUVHbvr06QOTyYS6ujpJe11dHfr373/V8TU1NaitrUV+fn5LW1NTEwCgU6dO2LdvH7KzpYXxUlNTkZqamoDe60vzVhBXunwrCCWTnd3uqSgo2Aqvt7alzeEYArd7qmJ9IiIidVI0uElJScHYsWNRWVnZspy7qakJlZWVePTRR686/oYbbsDevXslbUuXLsXp06fx+9//HhkZGXJ0W5ei2QpCyeDGbE6DxzMd1dUh+P0h5OSYOWJDREStUjS4AYCioiLMmjUL48aNw/jx41FSUoKGhgbMnj0bADBz5kwMGjQIq1atQlpaGm688UbJ+T179gSAq9rVQAgIqDleg5x+Oapf4q2VrSCsVgY1REQUmeLBzYwZM3D8+HEsX74cgUAAo0ePhsfjaUkyPnToEIxGTaUGqTYxN5LmrSB8VT7JLuUmowmOXIfqgzMiIqJmBlEUxWsfph/19fXo0aMHTp06hfT09IQ8h6vE1WaQ4FnoSchzxkOoIYSC0gJNBWVERJQcYvn+ZnATZ0JAgH2Zve3HnxHaPQoi1zRXdV01/Mf8mphOIyKi5BDL97fi01J6k4jEXLmnuawWK4MaIiLSLG0ls2hAIhJz1Vp/hoiISI0Y3MRZc2KuyWiStJuMJjiHO2MeEWmuP3N5/g4grT9DRERElzC4SQD3XDccuQ5JmyPXAfdcd8y/K5ppLiIiIrqEOTcJYO5qhmehJy6JuVqpP0NERKQWDG4SKB6Juaw/Q0TR0FLRUKJE47SUBsRzmosiE4QgKir2o7o6pHRXiKISbAjCVeKCfZkdeS/mwbbUBleJC6EG/g1T8mKdGw1h/ZnECQbPorCwTLIxp9OZCbd7KszmNOU6RnQNWi0aStojCEHU1JxUbG8/FvGLQMvBDSWOy7UJPt9BhMOX/jmYTAY4HEPg8UxXsGdEbUtk0VCiZmq5+Yvl+5vTUpT0BCEIr7dWEtgAQDgswuut5RQVqRZXU5IcCgvL4PMdlLT5fAdRULBVoR5dG4MbSno1NScjPu73M7ghdeJqSko0rd78MbihpJed3TPi4zk53DSU1CneRUOJrqTVmz8GN5T0bLZecDozYTIZJO0mkwFOZ6YiiXNE0eJqSkqkiDd/6cfxrfELVVbKZ0IxEYBQ6BwKCrYqnjBH1F5cTUmJctWCi9QzwO1vAdfvazkmkZs5N+NqqQgY3FAk1dUh+P0hxZY6UmKx0B1R7K66+XOWwnC9H6KhqeUYOcoPMLiJgMENUfIJNgRRWFoI71feljY57jSJ9KS6OoRtu3fh4Q8dbR6TyPIDXApORHSZwtJC+Kp8kjZflQ8FpQUK9YhIe6xWM67PbYx4jFrKDzC4ISJdEwICvF95JRV8ASDcFIb3K68qkyGJ1Eor5QcY3BCRrrHQHVH8aKX8AIMbItI1rdxpEl1OCAio2FuhypFFLZQf6KR0B4iIEqn5TrOtzSXVcqdJBGgj+d3c1QzPQo+qyw9w5IaIdE8Ld5pEgLaS360WK6aMmKK6wAbgUnClu0NEMlLznSYRd3mPLJbvb05LEVHSsFqsSf3lQOoWTfI7/36jw+CGiJIOKxWTGjH5PX4Y3BC1gV+A+qOFZM1EE4QgampOcosRFWLye/wwoZjoCsGGIFwlLtiX2ZH3Yh5sS21wlbgQaggp3TXqIC0la8ZbMHgWLtcm2O0bkJe3GTbbq3C5NiEUOqd01+gyTH6PDyYUE13BVeJq884pkZvCUWIle7LmVTs7AzCZDHA4hsDjma5gz6g1TH6/GveWImonlurXr2SuVCwIQXi9tZLABgDCYRFeby2qqzkqqTZqXmatBQxuiC6TzF+AepfMyZo1NScjPu73M7ghfWFwQ3SZZP4C1Dut7ImTCNnZPSM+npPDxGLSFwY3RJdJ5i/AZJCMyZpCQEDN+X/gx3enwmQySB4zmQxwOjO5aop0hwnFRFcINYRQUFqQ1MuF9S4ZkjVbW/be++wofPfOfUDjdQAApzMTbvdUmM1pSnWTKGqxfH8zuCFqQzJ8AZJ+tbXq75Yht2HxmFLWuSHN4fYLRHHAUv2kVc2r/q4Ubgrjfw58hFfnhGG1MLAh/WLODVGSEwICKvZWcJm7jnDVHyU7jtxQUmHp+Uu4FYF+cdUfJTuO3FBSYOn5qyXzVgR6x1V/lOwY3GiEIARRUbGflUTbqbCwDD7fQUmbz3cQBQVbFeqRsliJWf/Uvuyd06GUSJyWUrlg8CwKC8vg9da2tHH5ZmyaS89f6fLS88k2RRVNToYa7+45rRg9c1czPAs9qlv1x+lQkgNHblSOIw4dx9LzV9NaTganFdtPbXsUcTqU5MDgRsW42V18sPT81bSWk8EgXx84HUpyYXCjYhxxiA+brReczkyWnr+C2nMymjHI1w8uUSe5MOdGxTjiED9u91QUFGyV5N44HEPgdk9VrlMKU2tOxpWiCfKTNUDVGq1Nh5J2MbhRWKQEyeYRB5/voOSu1WQywOEYwg/0GJjNafB4pqO6OgS/P8SE1MuovRIzg3z9aJ4ObW1bCEeuQ9V/h6QtnJZSSLQJkm73VDgcQyRtyT7i0BFWqxlTpmQxsNEQTivqi1amQ0nbuHGmQlyuTW2OyHg80686niMOlMxCoXNXTSuyJIK2qX06lNSHu4JHoIbgRhCCsNs3RHh8DgMYolYwyCdKXtwVXOWYIEnUPlYrgxoiujbm3CiACZJERESJw+BGAUyQJCIiShwGNwrhKigiIqLEYM6NQlh3hYhI34SAgJrjNVwRpgAGNwpjgiQRkb5w53PlcVqKiIgojrjzufJUEdysW7cOmZmZSEtLw4QJE7Bjx442jy0tLcWtt94Ks9kMs9kMh8MR8XgiLRGEICoq9nMzSCKN4s7n6qB4cPP222+jqKgIxcXF2LVrF0aNGgWn04ljx461evy2bdtQUFCAjz/+GNu3b0dGRgbuuusufPvttzL3nCh+ot2Og4jUjTufq4PiFYonTJiAm266CWvXrgUANDU1ISMjA4899hgWLVp0zfPD4TDMZjPWrl2LmTNnXvN4NVQoJrpSrNtxEJE6CQEB9mX2th9/RmBycTvF8v2t6MhNY2Mjdu7cCYfj0iZqRqMRDocD27dvj+p3nDlzBhcuXECvXr1affz8+fOor6+X/BCpiSAE4fXWSgIbAAiHRXi9tZyiItKQ5p3PTUaTpN1kNME53MnARiaKBjcnTpxAOByGxWKRtFssFgQCgah+xxNPPIGBAwdKAqTLrVq1Cj169Gj5ycjI6HC/IxECAir2VnBeVQfkyn+JZjsOItIO7nyuPE0vBV+9ejU2btyIbdu2IS2t9Z2BFy9ejKKiopb/r6+vT0iAw6V/+hEMnkVhYZlsO1BzOw4ifTF3NcOz0MOdzxWk6MhNnz59YDKZUFdXJ2mvq6tD//79I567Zs0arF69Gh988AFGjhzZ5nGpqalIT0+X/CQCl/7pR2FhGXy+g5I2n+8gCgq2JuT5uB0HkT5ZLVZMGTGFgY0CFA1uUlJSMHbsWFRWVra0NTU1obKyEhMnTmzzvOeeew5PP/00PB4Pxo0bJ0dXI+LSP/1QKv+F23EQEcWP4tNSRUVFmDVrFsaNG4fx48ejpKQEDQ0NmD17NgBg5syZGDRoEFatWgUA+I//+A8sX74cb731FjIzM1tyc7p164Zu3bop8hqiWfrHyF0bosl/ScRICrfjICKKH8WDmxkzZuD48eNYvnw5AoEARo8eDY/H05JkfOjQIRiNlwaY1q9fj8bGRkyfLl0eW1xcjBUrVsjZ9RbZfbMjPp7TL0emnlBHKZ3/wu04iIg6TvE6N3JLVJ0bV4kLviqfZGrKZDTBkeuAZ6Enbs9DiceaM0RE6qOZOjd6wqV/+sH8FyIibVN8WkovRCTVAJiuMf+FiEjbOC0VJ5yWIiIiShxOS8mMS8GJIuNu5/rEiuykVpyWigMuBSdqndzVnkkerMjePkJAQM3xGlYslgFHbuKAS8GJWid3tWeSByuyxybYEISrxAX7MjvyXsyDbakNrhIXQg0cyUwUBjdxwF1gia7G3c71idPwsWMwKD8GN3HCpeBEUtztXJ+imYanSxgMKoM5N3HCXWCJpJSu9kyJwWn42DAnUxkcuYkz7gJL9APudq5PnIaPDYNBZTC4IaKEYbVnfeI0fPQYDCqDRfyIKOFY7VmfOA0fnVBDCAWlBVw630GxfH8zuCEiIpIBg8GOieX7mwnFRApiUS+i5GG1WPnvXCYMbogUwAqvlMwEIYiampOcpqSEYUIxkQJY1IuSUTB4Fi7XJtjtG5CXtxk226twuTYhFDqndNdIZxjcEMmMRb0oWXE7DpILgxsimbHCKyUjbsdBcmJwQyQzFvWiZMTtOEhODG6IZMaiXpSMuB0HyYnBDZECWOGVkg234yA5sYgfkYJY1IuSSSh0DgUFW+H11ra0OZ2ZcLunwmxOa/fvZb2o5MAKxREwuCEiUla8tuNgvajkwuAmAgY3RET64CpxwVflk5RVMBlNcOQ64FnoUbBnlAixfH8z54aIiDQnEfWiBCGIior9XJauA9x+gYiINCeaelHR5t8Eg2dRWFgW91wgUg5HboiISHPiWS+KlZP1h8ENERFpTrzqRbFysj4xuCEiIk2KR70otVROZr5PfDHnhoiINMnc1QzPQk+H6kUpXTlZj/k+ghBETc3JDi/17wiO3BARkaZZLVZMGTGlXQX8lK6crKd8n2DwLFyuTbDbNyAvbzNstlfhcm1CKHRO9r4wuCHN4LAtKYF/d/rndk+FwzFE0uZwDIHbPTWhz6u3fB81BWqcliLV0+OwLakf/+6Sh9mcBo9netwqJ0crmnwfrey51RyoXenyQE3O18KRG1I9Nd0NUPLg313ysVrNmDIlS7YvYaXzfeJJLYnZzRjckKrpbdiWtIF/d9okBARU7K1oV3ViJSid7xNPagvUGNyQqqntboCSA//utCXYEISrxAX7MjvyXsyDbakNrhIXQg3qf5+UyveJN7UFagxuSNXUdjdAyYF/d9pSWFoIX5VP0uar8qGgtEChHkWvOd9HEOagvPw+CMIceDzTNZnXpaZAjQnFpGrNdwM+30HJFIHJZIDDMURTw7akHfy7047mDTSvdPkGmu1ZIi43q1W5mjDxolRidms4ckOqp6a7AUoe/LvThmg20CR5yZ2Y3RqO3JDqqelugJIH/+60IZ4baJJ+MLghzdDDsC1pD//u1K15A01flQ/hpnBLu8logiPXoYkpKYo/TksREZGmxWMDTdIXjtwQEZGmxWMDTdIXBjdERKQLVouVQQ0BYHBD1CGCEERNzUkmmxIRqQiDG6J24KaKRETqxYRionbgpopEROrF4IYoRtxUUR5a2wSRiNSD01JEMYpmU0Xm37RfsCGIwtJCSUl953An3HPdMHfldSWia+PIDVGMuKliYml5E0QiUgcGN0Qxat5U0WQySNpNJgN+fHcK/Of+zqmUdmreBPHySrOAdBNEIqJrYXBD1A5XbaqYegY9//8/49MBC5D3Yh5sS21wlbgQamD+TSy4CSIRxQODG6J2aN5UURDmoLz8Pty6/P/iZNcvJcdwKiV23ASRiOKBwQ1RB1itZmSPuYj/OfARp1LioHkTRJPRJGk3GU1wDney+iwRRYXBDVEHcSolvrgJIpHytF6KgUvBiTqIUynxxU0QiZSjl1IMHLnREa1H2lrFqZTEsFqsmDJiCq8fkYz0UopBFcHNunXrkJmZibS0NEyYMAE7duyIePw777yDG264AWlpaRgxYgTKy8tl6qk6BRuCcJW4YF9m50odhXAqhYi0Tk+lGBQPbt5++20UFRWhuLgYu3btwqhRo+B0OnHs2LFWj//b3/6GgoICzJkzB7t378a0adMwbdo0fPnll60enwz0EmlrWfNUivCMgPJflkN4RoBnoUdTw7hElNz0lD9oEEVRvPZhiTNhwgTcdNNNWLt2LQCgqakJGRkZeOyxx7Bo0aKrjp8xYwYaGhqwdeulDQpvvvlmjB49Gi+//PJVx58/fx7nz59v+f/6+npkZGTg1KlTSE9PT8ArkpcQEGBfZm/78WcEDusTEdE1qf37pL6+Hj169Ijq+1vRkZvGxkbs3LkTDsel4Xyj0QiHw4Ht27e3es727dslxwOA0+ls8/hVq1ahR48eLT8ZGRnxewEqoKdIm4iIlKOn/EFFg5sTJ04gHA7DYrFI2i0WCwKBQKvnBAKBmI5fvHgxTp061fJz+PDh+HReJbhSh4iI4kUv+YO6XwqempqK1NRUpbuRMM2Rtq/KJ0kCMxlNcOQ6NBVpExGRsvRSikHRkZs+ffrAZDKhrq5O0l5XV4f+/fu3ek7//v1jOj4Z6CXSJiIiddB6KQZFg5uUlBSMHTsWlZWVLW1NTU2orKzExIkTWz1n4sSJkuMB4MMPP2zz+GTAlTpERESXKD4tVVRUhFmzZmHcuHEYP348SkpK0NDQgNmzZwMAZs6ciUGDBmHVqlUAgAULFuC2227D888/j7vvvhsbN27EF198gVdeeUXJl6EKVotVs1E2ERFRvCge3MyYMQPHjx/H8uXLEQgEMHr0aHg8npak4UOHDsFovDTAdMstt+Ctt97C0qVL8eSTT8JqteLdd9/FjTfeqNRLICIiIhVRvM6N3GJZJ09ERETqoJk6N0RERETxxuCGiIiIdIXBDREREekKgxsiIiLSFQY3REREpCsMboiIiEhXGNwQERGRrjC4ISIiIl1RvEKx3JprFtbX1yvcEyIiIopW8/d2NLWHky64OX36NAAgIyND4Z4QERFRrE6fPo0ePXpEPCbptl9oamrCkSNH0L17dxgMhrj8zvr6emRkZODw4cPc0iHBeK3lw2stL15v+fBayyee11oURZw+fRoDBw6U7DnZmqQbuTEajbj++usT8rvT09P5D0UmvNby4bWWF6+3fHit5ROva32tEZtmTCgmIiIiXWFwQ0RERLrC4CYOUlNTUVxcjNTUVKW7onu81vLhtZYXr7d8eK3lo9S1TrqEYiIiItI3jtwQERGRrjC4ISIiIl1hcENERES6wuCGiIiIdIXBTRTWrVuHzMxMpKWlYcKECdixY0fE49955x3ccMMNSEtLw4gRI1BeXi5TT/UhlutdWlqKW2+9FWazGWazGQ6H45rvD10S6992s40bN8JgMGDatGmJ7aCOxHqtT548ifnz52PAgAFITU2FzWbjZ0kMYr3eJSUlsNvt6NKlCzIyMvCrX/0K586dk6m32vXJJ58gPz8fAwcOhMFgwLvvvnvNc7Zt24Yf/ehHSE1NRU5ODl577bX4d0ykiDZu3CimpKSIGzZsEL/66itx7ty5Ys+ePcW6urpWj//ss89Ek8kkPvfcc+LXX38tLl26VOzcubO4d+9emXuuTbFe78LCQnHdunXi7t27xaqqKvHBBx8Ue/ToIf773/+WuefaE+u1bnbgwAFx0KBB4q233iree++98nRW42K91ufPnxfHjRsn5uXliZ9++ql44MABcdu2beKePXtk7rk2xXq933zzTTE1NVV88803xQMHDoher1ccMGCA+Ktf/UrmnmtPeXm5uGTJEnHz5s0iAHHLli0Rj9+/f7943XXXiUVFReLXX38t/uEPfxBNJpPo8Xji2i8GN9cwfvx4cf78+S3/Hw6HxYEDB4qrVq1q9fj7779fvPvuuyVtEyZMEH/+858ntJ96Eev1vtLFixfF7t27i6+//nqiuqgb7bnWFy9eFG+55Rbxj3/8ozhr1iwGN1GK9VqvX79ezMrKEhsbG+Xqoq7Eer3nz58v3nHHHZK2oqIicdKkSQntp95EE9z89re/FYcPHy5pmzFjhuh0OuPaF05LRdDY2IidO3fC4XC0tBmNRjgcDmzfvr3Vc7Zv3y45HgCcTmebx9Ml7bneVzpz5gwuXLiAXr16JaqbutDea/3UU0+hX79+mDNnjhzd1IX2XOv33nsPEydOxPz582GxWHDjjTdi5cqVCIfDcnVbs9pzvW+55Rbs3LmzZepq//79KC8vR15enix9TiZyfUcm3caZsThx4gTC4TAsFouk3WKx4Jtvvmn1nEAg0OrxgUAgYf3Ui/Zc7ys98cQTGDhw4FX/eEiqPdf6008/xauvvoo9e/bI0EP9aM+13r9/Pz766CP89Kc/RXl5Ofx+P+bNm4cLFy6guLhYjm5rVnuud2FhIU6cOIEf//jHEEURFy9exCOPPIInn3xSji4nlba+I+vr63H27Fl06dIlLs/DkRvSjdWrV2Pjxo3YsmUL0tLSlO6Orpw+fRoPPPAASktL0adPH6W7o3tNTU3o168fXnnlFYwdOxYzZszAkiVL8PLLLyvdNV3atm0bVq5ciZdeegm7du3C5s2bUVZWhqefflrprlE7ceQmgj59+sBkMqGurk7SXldXh/79+7d6Tv/+/WM6ni5pz/VutmbNGqxevRo+nw8jR45MZDd1IdZrXVNTg9raWuTn57e0NTU1AQA6deqEffv2ITs7O7Gd1qj2/F0PGDAAnTt3hslkamnLzc1FIBBAY2MjUlJSEtpnLWvP9V62bBkeeOAB/OxnPwMAjBgxAg0NDXj44YexZMkSGI0cB4iXtr4j09PT4zZqA3DkJqKUlBSMHTsWlZWVLW1NTU2orKzExIkTWz1n4sSJkuMB4MMPP2zzeLqkPdcbAJ577jk8/fTT8Hg8GDdunBxd1bxYr/UNN9yAvXv3Ys+ePS0/99xzD26//Xbs2bMHGRkZcnZfU9rzdz1p0iT4/f6WABIABEHAgAEDGNhcQ3uu95kzZ64KYJoDS5HbL8aVbN+RcU1P1qGNGzeKqamp4muvvSZ+/fXX4sMPPyz27NlTDAQCoiiK4gMPPCAuWrSo5fjPPvtM7NSpk7hmzRqxqqpKLC4u5lLwGMR6vVevXi2mpKSImzZtEo8ePdryc/r0aaVegmbEeq2vxNVS0Yv1Wh86dEjs3r27+Oijj4r79u0Tt27dKvbr10985plnlHoJmhLr9S4uLha7d+8uut1ucf/+/eIHH3wgZmdni/fff79SL0EzTp8+Le7evVvcvXu3CEB84YUXxN27d4sHDx4URVEUFy1aJD7wwAMtxzcvBX/88cfFqqoqcd26dVwKrpQ//OEP4uDBg8WUlBRx/Pjx4t///veWx2677TZx1qxZkuP/+te/ijabTUxJSRGHDx8ulpWVydxjbYvleg8ZMkQEcNVPcXGx/B3XoFj/ti/H4CY2sV7rv/3tb+KECRPE1NRUMSsrS3z22WfFixcvytxr7Yrlel+4cEFcsWKFmJ2dLaalpYkZGRnivHnzxFAoJH/HNebjjz9u9TO4+frOmjVLvO222646Z/To0WJKSoqYlZUl/ulPf4p7vwyiyDE3IiIi0g/m3BAREZGuMLghIiIiXWFwQ0RERLrC4IaIiIh0hcENERER6QqDGyIiItIVBjdERESkKwxuiIiISFcY3BAREZGuMLghIs178MEHYTAYWn569+4Nl8uFf/3rX0p3jYgUwOCGiHTB5XLh6NGjOHr0KCorK9GpUydMnTpV6W4RkQIY3BCRLqSmpqJ///7o378/Ro8ejUWLFuHw4cM4fvy40l0jIpkxuCEi3fn+++/xl7/8BTk5Oejdu7fS3SEimXVSugNERPGwdetWdOvWDQDQ0NCAAQMGYOvWrTAaeQ9HlGz4r56IdOH222/Hnj17sGfPHuzYsQNOpxNTpkzBwYMHle4aEcmMwQ0R6ULXrl2Rk5ODnJwc3HTTTfjjH/+IhoYGlJaWKt01IpIZgxsi0iWDwQCj0YizZ88q3RUikhlzbohIF86fP49AIAAACIVCWLt2Lb7//nvk5+cr3DMikhuDGyLSBY/HgwEDBgAAunfvjhtuuAHvvPMOJk+erGzHiEh2BlEURaU7QURERBQvzLkhIiIiXWFwQ0RERLrC4IaIiIh0hcENERER6QqDGyIiItIVBjdERESkKwxuiIiISFcY3BAREZGuMLghIiIiXWFwQ0RERLrC4IaIiIh05f8BReSJtxFMm4AAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 散点图\n",
    "\n",
    "df4 = pd.DataFrame(np.random.rand(50, 4), columns=list('ABCD'))\n",
    "df4.plot.scatter(x='A', y='B') # A和B关系绘制\n",
    "\n",
    "# 在一张图中绘制AC散点图，同时绘制BD散点图\n",
    "ax = df4.plot.scatter(x='A', y='C', color='DarkBlue', label='Group 1');\n",
    "df4.plot.scatter(x='B', y='D', color='DarkGreen', label='Group 2', ax=ax)\n",
    "\n",
    "# 气泡图，散点有大小之分\n",
    "df4.plot.scatter(x='A',y='B',s = df4['C']*200)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "id": "b2495554-5d49-469c-b85c-3ff56a2687c0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 面积图\n",
    "\n",
    "df5 = pd.DataFrame(data = np.random.rand(10, 4), \n",
    "                   columns=list('ABCD'))\n",
    "df5.plot.area(stacked = True);# stacked 是否堆叠"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "id": "66cbcf90-af80-4d08-9fb6-bac17682ad18",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 172,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 箱式图\n",
    "\n",
    "df6 = pd.DataFrame(data = np.random.rand(10, 5), \n",
    "                   columns=list('ABCDE'))\n",
    "df6.plot.box()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "id": "575a5ee9-c84f-4dde-9772-52704b2123a0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[<Axes: title={'center': 'A'}>, <Axes: title={'center': 'B'}>],\n",
       "       [<Axes: title={'center': 'C'}>, <Axes: >]], dtype=object)"
      ]
     },
     "execution_count": 173,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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2RQbG6vo6Gg1NDRYHcdnOnTo0KoRnTMoOwAAtFOBgYFeKQOmY4IyAAAwGmUHAAAYjbIDAACMRtkBAABGo+wAAACjUXYAAIDRKDsAAMBolB0AAGA0yg4AADAaZQcAABiNsgMAAIxG2QEAAEaj7AAAAKNRdgAAgNEoOwAAwGiUHQAAYDTKDgAAMJqlZScrK0tDhw5VWFiYoqOjNXnyZBUVFbkdM2rUKNlsNrfljjvucDumpKREEydOVGhoqKKjo3XfffepsbGxLW8FAAD4qSArL56fn6/09HQNHTpUjY2N+v3vf6+xY8fqs88+U+fOnV3HzZ49W4sWLXKth4aGuv7c1NSkiRMnym6367333lNZWZmmT5+uDh066A9/+EOb3g8AAPA/lpadbdu2ua3n5OQoOjpa+/bt08iRI13bQ0NDZbfbz3mOt956S5999pnefvttxcTEKCEhQYsXL9YDDzygRx55RMHBwT69BwAA4N/8as5OVVWVJCkqKspt+4svvqiLLrpIAwYMUGZmpr777jvXvoKCAg0cOFAxMTGubSkpKaqurtaBAwfaJjgAAPBblo7s/Fhzc7PmzZunESNGaMCAAa7tt956q3r06KG4uDjt379fDzzwgIqKivTKK69IkhwOh1vRkeRadzgc57xWXV2d6urqXOvV1dXevh0AAOAn/KbspKen69NPP9W7777rtv322293/XngwIGKjY3VmDFjdOjQIV122WUeXSsrK0sLFy5sVV4AANA++MXHWHPmzFFubq527typbt26XfDYxMRESVJxcbEkyW63q7y83O2YM+vnm+eTmZmpqqoq13L06NHW3gIAAPBTlpYdp9OpOXPm6NVXX9WOHTvUs2fPn31NYWGhJCk2NlaSlJSUpE8++UTHjx93HZOXl6fw8HD179//nOcICQlReHi42wIAAMxk6cdY6enp2rhxo15//XWFhYW55thERESoU6dOOnTokDZu3KgJEyaoa9eu2r9/v+bPn6+RI0dq0KBBkqSxY8eqf//+uu2227RkyRI5HA499NBDSk9PV0hIiJW3BwAA/IClIztr1qxRVVWVRo0apdjYWNeyefNmSVJwcLDefvttjR07Vn379tU999yj1NRUbd261XWOwMBA5ebmKjAwUElJSZo2bZqmT5/u9lweAADw62XpyI7T6bzg/vj4eOXn5//seXr06KG/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lCSptLRUNTU1XgsHAADQWh6N7Bw5ckTjxo1TSUmJ6urqdN111yksLExPPPGE6urqtHbtWm/nBAAA8IhHIzt33323hgwZom+//VadOnVybb/xxhu1fft2r4UDAABoLY9Gdv72t7/pvffeU3BwsNv2Sy65RN98841XggEAAHiDRyM7zc3NampqOmv7sWPHFBYW1upQAAAA3uLRyM7YsWO1fPly/fGPf5Qk2Ww21dTU6OGHH+ZXSADAr9SyvC+sjtBi86/rY3UEtAGPys7TTz+tlJQU9e/fX6dPn9att96qL7/8UhdddJFeeuklb2cEAADwmEdlp1u3bvr444+1adMm7d+/XzU1NUpLS9PUqVPdJiwDAABYzaOyI0lBQUGaNm2aN7MAAAB4nUdlZ8OGDRfcP336dI/CAAAAeJtHZefuu+92W29oaNB3332n4OBghYaGUnYAAIDf8Oir599++63bUlNTo6KiIl199dVMUAYAAH7F49+N9VO9e/fW448/ftaoDwAAgJW8VnakHyYtl5aWevOUAAAAreLRnJ2//OUvbutOp1NlZWVauXKlRowY4ZVgAAAA3uBR2Zk8ebLbus1m08UXX6xrr71WTz/9tDdyAQAAeIVHZae5udnbOQAAAHzCq3N2AAAA/I1HIzsZGRm/+NilS5d6cgkAAACv8KjsfPTRR/roo4/U0NCgyy+/XJL0xRdfKDAwUFdddZXrOJvN5p2UAAAAHvKo7EyaNElhYWFav369fvOb30j64UGDs2bN0jXXXKN77rnHqyEBAAA85dGcnaefflpZWVmuoiNJv/nNb/Too4/ybSwAAOBXPCo71dXVqqioOGt7RUWFTp061epQAAAA3uJR2bnxxhs1a9YsvfLKKzp27JiOHTumP//5z0pLS9OUKVO8nREAAMBjHs3ZWbt2re69917deuutamho+OFEQUFKS0vTk08+6dWAAAAAreFR2QkNDdXq1av15JNP6tChQ5Kkyy67TJ07d/ZqOAAAgNZq1UMFy8rKVFZWpt69e6tz585yOp0tev2uXbs0adIkxcXFyWaz6bXXXnPbP3PmTNlsNrdl3LhxbsecPHlSU6dOVXh4uCIjI5WWlqaamprW3BYAADCIR2XnxIkTGjNmjPr06aMJEyaorKxMkpSWltair53X1tbqyiuv1KpVq857zLhx41ylqqysTC+99JLb/qlTp+rAgQPKy8tTbm6udu3apdtvv92T2wIAAAby6GOs+fPnq0OHDiopKVG/fv1c22+66SZlZGT84q+fjx8/XuPHj7/gMSEhIbLb7efc9/nnn2vbtm3au3evhgwZIklasWKFJkyYoKeeekpxcXG/8I4AAICpPBrZeeutt/TEE0+oW7dubtt79+6tI0eOeCXYGe+8846io6N1+eWX684779SJEydc+woKChQZGekqOpKUnJysgIAAvf/+++c9Z11dnaqrq90WAABgJo/KTm1trUJDQ8/afvLkSYWEhLQ61Bnjxo3Thg0btH37dj3xxBPKz8/X+PHj1dTUJElyOByKjo52e01QUJCioqLkcDjOe96srCxFRES4lvj4eK9lBgAA/sWjsnPNNddow4YNrnWbzabm5mYtWbJEo0eP9lq4m2++Wb/97W81cOBATZ48Wbm5udq7d6/eeeedVp03MzNTVVVVruXo0aPeCQwAAPyOR3N2lixZojFjxuiDDz5QfX297r//fh04cEAnT57U//7v/3o7o8ull16qiy66SMXFxRozZozsdruOHz/udkxjY6NOnjx53nk+0g/zgLw5AgUAAPyXRyM7AwYM0BdffKGrr75aN9xwg2prazVlyhR99NFHuuyyy7yd0eXYsWM6ceKEYmNjJUlJSUmqrKzUvn37XMfs2LFDzc3NSkxM9FkOAADQfrR4ZKehoUHjxo3T2rVr9e///u+tunhNTY2Ki4td64cPH1ZhYaGioqIUFRWlhQsXKjU1VXa7XYcOHdL999+vXr16KSUlRZLUr18/jRs3TrNnz9batWvV0NCgOXPm6Oabb+abWAAAQJIHZadDhw7av3+/Vy7+wQcfuM3xycjIkCTNmDFDa9as0f79+7V+/XpVVlYqLi5OY8eO1eLFi90+gnrxxRc1Z84cjRkzRgEBAUpNTdWzzz7rlXwAzna08nurI7TYP1gdAIClPJqzM23aNGVnZ+vxxx9v1cVHjRp1wacuv/nmmz97jqioKG3cuLFVOQAAgLk8KjuNjY16/vnn9fbbb2vw4MFn/U6spUuXeiUcAABAa7Wo7Hz11Ve65JJL9Omnn+qqq66SJH3xxRdux9hsNu+lAwAAaKUWlZ3evXurrKxMO3fulPTDr4d49tlnFRMT45NwAAAArdWir57/dH7NG2+8odraWq8GAgAA8CaPnrNz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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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f//73zV8+HDTZYWcJ598UqtXr9Y///lP06V0quzsbI0cOVK///3vJX356WLp6elasGCBFi1aZLi60HLq1CklJydrx44dGjNmjOlyAABhgCukkhoaGjR37lz913/9l+Lj402XE9IaGxuVlJRkuoxOdenSJdXV1SkvL887LSoqSnl5eaqtrTVYWWhqbGyUpC53nAAA2q/LB1KPx6NZs2bp5z//ubKyskyXE9Lq6+u1atUq/exnPzNdSqf6/PPP1dTU1OKTxFJSUmS32w1VFZrcbrcWLlyoW265RUOGDDFdDgAgTERsIF20aJEsFstVvw4cOKBVq1bp3LlzWrx4semSO823HZuvO3bsmCZMmKA77rhDc+fONVQ5Ql1RUZH27dunl19+2XQpAIAwErHPIT116pROnz591Xmuv/56/eQnP9GGDRtksVi805uamhQdHa0ZM2boT3/6U7BL7XTfdmxiY2MlScePH1dubq5Gjx6tdevWKSoqYv+PadWlS5cUHx+vv/zlL5o6dap3+syZM3X27FmtX7/eXHEhpLi4WOvXr9fOnTuVkZFhuhwAQBiJ2ED6bR09elQOh8N7+/jx4yooKNBf/vIXZWdnq0+fPgarM+/YsWMaO3asMjMz9eKLLyo6Otp0SUZkZ2dr1KhRWrVqlaQvH5ru27eviouLu/yLmjwejxYsWKDXX39d27dv1w033GC6JABAmOlmugDT+vbt63P7mmuukSQNGDCAMHrsmHJzc9WvXz899dRTOnXqlPe+1NRUg5V1vpKSEs2cOVNZWVkaNWqUVq5cqQsXLmj27NmmSzOuqKhIVVVVWr9+vRISErzPq+3Zs6fi4uIMVwcACAddPpCibTU1Naqvr1d9fX2LcN7VLqzfeeedOnXqlJYsWSK73a7hw4erurq6xQuduqLVq1dLknJzc32mr127VrNmzer8ggAAYafLP2QPAAAAs7rWq1MAAAAQcgikAAAAMIpACgAAAKMIpAAAADCKQAoAAACjCKQAAAAwikAKAAAAowikAAAAMIpACgAAAKMIpAAAADCKQAoAAACjCKQAAAAw6v8BeyCLb68kMj8AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 800x800 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 直方图\n",
    "df7 = pd.DataFrame({'A': np.random.randn(1000) + 1,\n",
    "                    'B': np.random.randn(1000),\n",
    "                    'C': np.random.randn(1000) - 1})\n",
    "\n",
    "df7.plot.hist(alpha=0.5) #带透明度直方图\n",
    "\n",
    "df7.plot.hist(stacked = True)# 堆叠图\n",
    "\n",
    "df7.hist(figsize = (8,8)) # 子视图绘制"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8eaf0615-1a49-4f0a-b398-97fc2a9ef987",
   "metadata": {},
   "source": [
    "## 作业"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "id": "ca6989b3-c4bf-4df3-bbaa-ba4d6bc05b62",
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "df_boys = pd.read_excel('体测分数_男生_女生_处理.xlsx', sheet_name='男生')\n",
    "df_girls = pd.read_excel('体测分数_男生_女生_处理.xlsx', sheet_name='女生')\n",
    "\n",
    "# display(df_boys.head())\n",
    "# display(df_girls.head())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "id": "c41ccfaf-936a-4e8e-82b5-bfbb9a4b6d9d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>男1000米跑</th>\n",
       "      <th>男1000米跑分数</th>\n",
       "      <th>男50米跑</th>\n",
       "      <th>男50米跑分数</th>\n",
       "      <th>男跳远</th>\n",
       "      <th>男跳远分数</th>\n",
       "      <th>男体前屈</th>\n",
       "      <th>男体前屈分数</th>\n",
       "      <th>男引体</th>\n",
       "      <th>男引体分数</th>\n",
       "      <th>男肺活量</th>\n",
       "      <th>男肺活量分数</th>\n",
       "      <th>班级</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*森18</td>\n",
       "      <td>5.19</td>\n",
       "      <td>40</td>\n",
       "      <td>9.55</td>\n",
       "      <td>50</td>\n",
       "      <td>210</td>\n",
       "      <td>66</td>\n",
       "      <td>15</td>\n",
       "      <td>80</td>\n",
       "      <td>6</td>\n",
       "      <td>50</td>\n",
       "      <td>7042</td>\n",
       "      <td>100</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>男</td>\n",
       "      <td>苏*飞27</td>\n",
       "      <td>4.12</td>\n",
       "      <td>72</td>\n",
       "      <td>8.60</td>\n",
       "      <td>68</td>\n",
       "      <td>215</td>\n",
       "      <td>70</td>\n",
       "      <td>15</td>\n",
       "      <td>80</td>\n",
       "      <td>11</td>\n",
       "      <td>76</td>\n",
       "      <td>3458</td>\n",
       "      <td>74</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>男</td>\n",
       "      <td>寻*潇13</td>\n",
       "      <td>4.17</td>\n",
       "      <td>70</td>\n",
       "      <td>8.16</td>\n",
       "      <td>72</td>\n",
       "      <td>215</td>\n",
       "      <td>70</td>\n",
       "      <td>14</td>\n",
       "      <td>78</td>\n",
       "      <td>4</td>\n",
       "      <td>30</td>\n",
       "      <td>4336</td>\n",
       "      <td>90</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*冉36</td>\n",
       "      <td>4.19</td>\n",
       "      <td>70</td>\n",
       "      <td>8.96</td>\n",
       "      <td>64</td>\n",
       "      <td>205</td>\n",
       "      <td>64</td>\n",
       "      <td>14</td>\n",
       "      <td>78</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>4539</td>\n",
       "      <td>95</td>\n",
       "      <td>36</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>男</td>\n",
       "      <td>王*磊40</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0</td>\n",
       "      <td>8.30</td>\n",
       "      <td>72</td>\n",
       "      <td>230</td>\n",
       "      <td>76</td>\n",
       "      <td>14</td>\n",
       "      <td>78</td>\n",
       "      <td>9</td>\n",
       "      <td>68</td>\n",
       "      <td>6059</td>\n",
       "      <td>100</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名  男1000米跑  男1000米跑分数  男50米跑  男50米跑分数  男跳远  男跳远分数  男体前屈  男体前屈分数  \\\n",
       "0  男  郭*森18     5.19         40   9.55       50  210     66    15      80   \n",
       "1  男  苏*飞27     4.12         72   8.60       68  215     70    15      80   \n",
       "2  男  寻*潇13     4.17         70   8.16       72  215     70    14      78   \n",
       "3  男  郭*冉36     4.19         70   8.96       64  205     64    14      78   \n",
       "4  男  王*磊40     0.00          0   8.30       72  230     76    14      78   \n",
       "\n",
       "   男引体  男引体分数  男肺活量  男肺活量分数  班级  \n",
       "0    6     50  7042     100  18  \n",
       "1   11     76  3458      74  27  \n",
       "2    4     30  4336      90  13  \n",
       "3    0      0  4539      95  36  \n",
       "4    9     68  6059     100  40  "
      ]
     },
     "execution_count": 175,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import re\n",
    "\n",
    "def convert(x):\n",
    "    # return x[3:]\n",
    "    match = re.search(r'\\d+$', x)\n",
    "    if match:\n",
    "        return match.group()\n",
    "    else:\n",
    "        return '0'\n",
    "\n",
    "df_boys['班级'] = df_boys['姓名'].map(convert).astype(np.int16)\n",
    "df_boys.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 187,
   "id": "8441de87-cf19-4db6-91e1-3149a4fa4a91",
   "metadata": {},
   "outputs": [
    {
     "ename": "ImportError",
     "evalue": "cannot import name '_rebuild' from 'matplotlib.font_manager' (/home/eugene/miniconda3/envs/aicourse/lib/python3.10/site-packages/matplotlib/font_manager.py)",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mImportError\u001b[0m                               Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[187], line 10\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mmatplotlib\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m pyplot \u001b[38;5;28;01mas\u001b[39;00m plt\n\u001b[1;32m      4\u001b[0m \u001b[38;5;66;03m# [(i.name,i.fname) for i in mpl.font_manager.FontManager().ttflist]\u001b[39;00m\n\u001b[1;32m      5\u001b[0m \u001b[38;5;66;03m#使用中文字符集\u001b[39;00m\n\u001b[1;32m      6\u001b[0m \u001b[38;5;66;03m# plt.rcParams['font.sans-serif'] = ['DroidSansMono Nerd Font']\u001b[39;00m\n\u001b[1;32m      7\u001b[0m \u001b[38;5;66;03m#使用中文字符集的数字负号\u001b[39;00m\n\u001b[1;32m      8\u001b[0m \u001b[38;5;66;03m# plt.rcParams['axes.unicode_minus'] = False\u001b[39;00m\n\u001b[0;32m---> 10\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mmatplotlib\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mfont_manager\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m _rebuild\n\u001b[1;32m     12\u001b[0m _rebuild()\n",
      "\u001b[0;31mImportError\u001b[0m: cannot import name '_rebuild' from 'matplotlib.font_manager' (/home/eugene/miniconda3/envs/aicourse/lib/python3.10/site-packages/matplotlib/font_manager.py)"
     ]
    }
   ],
   "source": [
    "# 查看支持的字体\n",
    "import matplotlib as mpl\n",
    "from matplotlib import pyplot as plt\n",
    "# [(i.name,i.fname) for i in mpl.font_manager.FontManager().ttflist]\n",
    "#使用中文字符集\n",
    "# plt.rcParams['font.sans-serif'] = ['DroidSansMono Nerd Font']\n",
    "#使用中文字符集的数字负号\n",
    "# plt.rcParams['axes.unicode_minus'] = False\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "id": "9c6be11e-6e80-42db-8a48-a7fc5b3a2513",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 186,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/eugene/miniconda3/envs/aicourse/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 30007 (\\N{CJK UNIFIED IDEOGRAPH-7537}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "/home/eugene/miniconda3/envs/aicourse/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 31859 (\\N{CJK UNIFIED IDEOGRAPH-7C73}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "/home/eugene/miniconda3/envs/aicourse/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 36305 (\\N{CJK UNIFIED IDEOGRAPH-8DD1}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "/home/eugene/miniconda3/envs/aicourse/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 20998 (\\N{CJK UNIFIED IDEOGRAPH-5206}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "/home/eugene/miniconda3/envs/aicourse/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 25968 (\\N{CJK UNIFIED IDEOGRAPH-6570}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "/home/eugene/miniconda3/envs/aicourse/lib/python3.10/site-packages/IPython/core/pylabtools.py:152: UserWarning: Glyph 30007 (\\N{CJK UNIFIED IDEOGRAPH-7537}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/home/eugene/miniconda3/envs/aicourse/lib/python3.10/site-packages/IPython/core/pylabtools.py:152: UserWarning: Glyph 31859 (\\N{CJK UNIFIED IDEOGRAPH-7C73}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/home/eugene/miniconda3/envs/aicourse/lib/python3.10/site-packages/IPython/core/pylabtools.py:152: UserWarning: Glyph 36305 (\\N{CJK UNIFIED IDEOGRAPH-8DD1}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/home/eugene/miniconda3/envs/aicourse/lib/python3.10/site-packages/IPython/core/pylabtools.py:152: UserWarning: Glyph 20998 (\\N{CJK UNIFIED IDEOGRAPH-5206}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/home/eugene/miniconda3/envs/aicourse/lib/python3.10/site-packages/IPython/core/pylabtools.py:152: UserWarning: Glyph 25968 (\\N{CJK UNIFIED IDEOGRAPH-6570}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiYAAAGeCAYAAACgv8rDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAACuYUlEQVR4nO2deZwdRbn3f31mzTYzmWyTkAUSyAaYkAAJYQkQjCCIgKIiIqvCVUEgchWvXiAo+AoCiihwZREUUBSIASP7GpKQjSSE7GTfJslkZpJJZubMnH7/OFsvVd1V1dXddU7q+/lAznR3LV1dy1NPPfWUYZqmCY1Go9FoNBoFSMSdAY1Go9FoNJosWjDRaDQajUajDFow0Wg0Go1GowxaMNFoNBqNRqMMWjDRaDQajUajDFow0Wg0Go1GowxaMNFoNBqNRqMMWjDRaDQajUajDKVxZ4CXVCqFbdu2oUePHjAMI+7saDQajUajYcA0Tezbtw8DBgxAIkHXixScYLJt2zYMGjQo7mxoNBqNRqMRYPPmzRg4cCD1fsEJJj169ACQfrGqqqqYc6PRaDQajYaF5uZmDBo0KDeO0yg4wSS7fFNVVaUFE41Go9FoCgw/Mwxt/KrRaDQajUYZtGCi0Wg0Go1GGbRgotFoNBqNRhm0YKLRaDQajUYZtGCi0Wg0Go1GGbRgotFoNBqNRhm0YKLRaDQajUYZtGCi0Wg0Go1GGbRgotFoNBqNRhmEBJNUKoXp06cjkUhgw4YNtnurVq3C5MmTUV1djUmTJmHRokW2+8lkEtdffz369++PYcOG4Z577hHOvEaj0Wg0muKC2yV9Y2MjLrvsMrS2tsI0Tdu9ZDKJs846C1/+8pfxf//3f3jmmWcwZcoUbNiwAdXV1QCAn//853jttdfw8ssvo7GxEV/72tdQV1eHyy67TM4baTQajUajKVi4NSY7duxA//79MXPmTNe9WbNmobGxEffddx+GDx+O2267DbW1tXjuuecAAB0dHXj88cdxxx13YPz48ZgyZQpuvPFG/OEPfwj+JhqNRqPRaAoebsFk5MiRePTRR1FZWem6t3jxYowbNw7l5eUA0gf1TJo0CQsWLAAAbN26Fbt27cKECRNyYSZNmoSFCxcilUoR02tra0Nzc7PtvzCpb27Fw++uQ0NLOzbtOYBH3l2H/W0dtmda2jrwyLvrsHFPS6h5YaHpQBIPv7sO2xoPxpqP5dua8NgH69HRSf6OJKx5r29uxY+eX4KfvrgMv3tzTe59kp0p/On9z7Bie3Ou3Dfstpf7myt2YuaSbYHyv3t/Gx5+dx3q97US7//nk+34zyfbsWtf+rnd+9swa9l2vLp8BzXONTv34f/e+wxtHZ2+6e9tacfD767DzmZy+ln27G/DH99Zh3qf57Is2NCAp+dudGk3AeBgeycefW8dPtu1HwBgmiaenrMBCzfudT1rbRespFImnpy9Hks2N9quPTF7Pe57bRVeWbqdGM7vW9D4ZGsTHv9gPTpT7nf1YtOeA/j+XxfhobfX4rmPNmHWsu14+N112NHEl74X63btx6PvrUNrMl8X/rlwC95bvYsaZtmWJjwxez1SnO/jh/UdrfXogzW78fyCzbm/P93WjD+9/5mtTbcmO/F/732GtfX7fdOp39eKe19dhQ/W7M5de3tVPWZ8vNX23Fsrd7qu8TJ77W783ZJ3J1sbD+Lhd9eh6UCS+kzTwXR/tJWhLzVNE0/N2YBFm/Zizc59+NWslVixXXxsyraLpVsabdce/2A9lm1pYopjy94DePjddWhuJb/j2vp0f2StgwDQeCDd92xvincMsSL1dOH6+nr07NnTdq22thbr1q3L3Qdge6a2thbJZBINDQ3o3bu3K867774bd9xxh8xsevLtxz/Cyh378N7qXfh4cyMOtHdiw54W3H3R53LP3PXvFfjrvE24/43VWHnnOZHljcSP/7kU/1m+A3+ZuxEf/PjM2PJx7u8+AACUlyZw2cQhTGGyeX96zkb07FaGT7bmG/Y/Fm7Be/99Bv784Qb84pUVAIBvnzQET83ZiHteXYW1d30RQLqDuPrPacF3wtBa9O3hFphZ+K+/LMT8DXsxa9l2zPjBKbZ7+9s6cN1f0rZSw/t1x+qd+/Hioq1YtXMfAGDlnWejsqzEFefn738PAHAw2Ykbphzlmf6Nf/sY767ehecXbMab006nPvf9ZxZh7mcN+NeSbZj1w1N93+urD88BAAyp7YrThvex3XvgzdV45N3PcNe/V2LDr87F26vq8fMZywEAG351ru3Zyx77CKt2ptvFM9+Z6JsuAMxcug23z/zUFt+MJVtxR+YaAEwa9nn07FZuC3fd0wuxYONevLJ0O2Zeb/8WXpz3YLoOdq8oxddOGMQc7gsPvIeDyU68sswuKP19wWa85fEteJjym3cBAHsPJPHjs0dibf1+THt+CQB3WWf50u/z73Px8ezv48XCjXvxkxeW5f5+afFW/OfG0wAA33psHgDgmMOqMap/Fb74u/cBpNv0t086HADw4Ftr8NDb6/DLf6+g5jvLQ2+txZ/nbMTv316be/bKJ+YDAMYN7olBtV0BAFc9mW6/JxxeiwE1XYTe69I/ZfI+oBqjB7hPnf/KHz7EjuZWLNvShIcuHUeM439eXIaXl27H4x+sx0f/c5Znem+sqMf/ZtrK6P5V+HR7M95csROv3zxZKP/WdpEtqxcWb8X0l+3XvLjgoQ+xe38bVmxvxm+/cZzr/ln3pfuj/W0duOnzw3PXb/nHUrz+6c7YxxAryu/KufXWW9HU1JT7b/NmulQsg5U70oPNh+v24EB7WrKc+1mD7Zm5n+0BALQm2bUDYfFuZsa1Za8a0u6n29ikewB4f00671sbD9qEEgDY1HAAALDUMlvIlnuHZQZpVQQ0H6TPhvyYvyGtJVhCmJ0caM9rzFbvTM8Us0IJALR1eNeDjy0aAxrZ77hul7cWLlsXeWdnGwjavYUb7JqRzzzSzr7vh+v2MKe5asc+17WVjmtObSQALMhobJZtZa9LVlbs4Cubg0myRsurPERZvCn9bn6aMSsrtrvLUZTNmXaVxfk9ALg0RcstbZOkTaOm5dEnkTRvu/e3McdNY0czOc0dmfLO9jkkPlib1uzU7/PPR1bLCACfZtriGgYtEo1VO9xhV3K28Wz5zV7r3UYXO/qj9xQbQwDJGpO6ujp88skntmsNDQ3o379/7j4A7N27FzU1Nbn7ZWVlqK2tJcZZUVGBiooKmdksKgwj7hzES8q2RHGIF4YHumTUwBD4EibkLeWwxOV8xvq3SP5z8RCWE63Xkp1yl6xIGJI6zJKE3BZFypZoVnnDJRQcRKRqTMaPH49FixahvT0vDc+dOxdjx44FAPTv3x91dXWYN2+e7f6YMWOQSCivvMkhq3LLQMVKJRO/rir8riw4pA45cgj1JOyqw/LWYeRBheKmkX1fntdW6X2CfC/Se1iv8din8aTBCs+rye53SbGJpsEbSrKMJQWpGpOpU6eib9++mDZtGm644QY8++yz2LFjBy655JJ0YqWluPbaa3H77bdj+PDhaGpqwgMPPIC77rpLZjako8TAQkG9OhVtjpT4NBLyYBjRv0uQ2a/KqNxes4MNTw6jfh9ncta/ecZKZ75ThPewXuM1WhZBljwRhcZEtHn6vaPzu6g4uZUqmJSWluK1117D1VdfjfHjx2PEiBF4/fXXbcs0P//5z9HY2Ihzzz0XFRUV+OEPf4hrrrlGZjako243BwUlE7mlZW1EpP6Z1NmpBpPmgPE5UeKoJqRP4xSGVNI+RoHI68qsFyzNxSWYSEqbJHdYryUjEExkkYhAzSA6ceANp2ITDCSYkCT5YcOG4Z133qGGKSkpwQMPPIAHHnggSNKaDArWqdhQsYGxYoSsMmGZkckWEkj2DFF8o8IZ3thQSfbmGfSc2SZNIqx1RMZSThB46n+J9KUceUut3DYmCq7lFI5hR4w425NKn/FQm3E6samZ48qDhKEw7LwTO76Q02RBhTxEiYjaXKbxK1t6jr8Fl3Jc8frYmMgwfvUT4ryyz2djwvEwA0TjV9G4OJ9XcSlHCyYFjmp1SvbszqT8zl+LoNP2ScLvnVnKJOzvyGL1Lz0LMc30VdIwOBExfo16hcOpCZfVxogaE6vxK8XJporI1jKQJpjiGhO+gAoqTLRgUugoWKciJWWbzalZGmw2JtHnXQXj11B25Si8mCOkMZH4Okw2Jh73eNqYM61OBYxfZSF/KUdiXHq78KGBs6NT6TuqOhhHhQo7MOLPgT9EExOXjYncNOMSyBSoElRIs1O/Ohx7HZeUvElQiFgFkyj8mHjBU/+j2JUjvF3Yd1eOnHTCRAsmBY56VSo8iA6aokg3aHimtZyAifhFH8dSDgNhaDcUlktAKmUZS4FB8dr9JsuFIdn4NY8UPyY+92VN5KQv5Ui0AeMV9vVSToES94TFCwWFXbn4ddqWviysovDbkixjRluMn5GlXFRuW2FA1Jj4hIliacr+HRw2Jpabov2NaZpkwcTSfgtpu7D0pRwWlWaQuDyfV6/30YIJA2p3nupVqiiJvtMm5SE4oRu/Emdk0fsUcaYQxtdTub2SithP8JU5XtOiYvUHxOWx1vrbtL+HmftXne3CPG9XEsHIGdauHJVNE7JowUQAFYwGs6hWqeTvyrGomCNIj5wHn/syPL+GvpZDuBRykkQHa4bzGYWliBAgfWcllnI80hNN3rY85Pg7KwhZhZWOKM7K8brH0R5k7qIB2GzAmOPiDCjbXkYGWjApcBSsU5GSkqBm9k3DZ8oqxY9J9HKJEoQz6Kor7JCOBPOrP1FoBb00JtZbooaS6aUc+9/WfwEgWUDbhUlLOUGMSMl+TEQ9v/KhjV810olDe/Pa8h248bnFaCEcWS+T7U3+x3BHMQQ9v3BLoEyENeNNpUzc+sJS/G3+Jinxhbkr541Pd+KHzy3G/tZw6wzAXt5vr6rHDc8uDiUP2xoP4vvPLMKiTXtt1/+9bEd6W6ylrK35bWnrwI3PLcary3dYHgglizaseXAm968l23D4T17BrGXbbXXksQ/Ws8cPu/Dz5IcbAThc0ndEoDERqOP3vbYKD765xnaNpGXgmSTuaGrF959ZhPkbGjL5ygf+/l8XYdOeA7a8+k2OrFjD3ff6avz2DXveXQ5D1ZNLtGBS6MRRqb779EK89PE2/PGdda57Mmd30/6+xN6ICFHbOtSQ+rXfOTolVx58wrOUicis5bVPd+LZjzbjx/9c5vssWfUcbuWxfo9rnlqAGR9vw5/nbKQ+E0a6Xlz5xHz8a8k2n7jEMnjT3z7GK0u346I/fOi69/JSe5rWJB5+dx1e+ngbrn16Yf6+UA7IBDFI/q+/LrL9fefLnzKnm3IYv87MlLtNYxK7jYmb3fvb8Lu31uI3r6/GwfbO3HXSrhye9vTjfy7FK0u34+KH52TC5u+9smw7rvvLQtuUk+QDhkY2Hw0t7fjdm2tw/xurPSeRWmNSoKi8Dh5nlarf1xpq/Ot27fd9xrmOHQdybEz4aT6Y9Lxv203BmYeo6nw424XlxSlaDBv3HKDea3J8N2t+tze521QUB1WmbO3IKz3RpRxyWdrnHWLvad/q7LthmOtOW0deWLKWEWkph6dkNu+11w+n5nv97habsMLjfC4brN2Sdy/BRkVzAC2YMOD8pCoJmHFu9WLZ6RGEZKfJtSMmLgEyNk+jPkXt15d5dUgyvHCylIvCMj+AcIQC04St4vpp/aLxYyI/PZfnV0KdsglEgumGWT7WJRRrV0tqOzyaB+ezZD9D+Ytcgol2sHZooHrnGRdh12cW1a7X2nhUSKkfAmXpF8TPMNh1yfJQVC4lwkhGZnsVLQeetuGnNZApHNFiYt4uLOzHxP+sHNGyjqrd+026eHa38PpB4VrK8dn55d4urAUTjWRUq1MytQftHSnf7cIyZlxB8bUxYciXyGf061B4dyxZH5ExGDKdy6K41C9aDr7FbTN+9ZauoyghH1OuHKLdjQmTKHiwLyGxpuNNmP0l33Zjx9+O+yZMKcavLOilHI104hRMlNCYePwVFf5nnfjHITJr8XWkZEmXuOzmkWZU8kIoGhOJcUVj35H/TUwtiqUcRrtT0TafMsntRMYSkizh1s/5nfU+KUXpSzmWNhvmAYd6KadAUfm00nidvYWbdopiMGfF64yPqIgrXb/+xG9QdQa3zdCiMn4NIRmZeRdfyvES+hyR2pYzwl3KoWHTTEpKzxknqSztgomg8SvHs54O1gL2ZzyaB+eyj8sLs+NvkV05NkHKo5/UGpMiQaU1OYWyAiDcQdp3xhVe0oFgEWxFviOPkRtv/FEJJup+tTTRCwWE+zKzQImLVQATHbxN+AtdwjYmofY57M9yaUycgomPtobH9xxJ0PAqW5XGsyxaMClwYtWXKFCfo/Bj4oeMwUvIxsQnlK/GxCO4DM1xbIf4SYyTdYmDF+u38xOuozkPik3zKN341fGMUNw+gl0QaNGR0uEZ4J3CAyms1a6kg0MyyUbFqo3SLukLFJXt8+LdLky4xmUA5v+wr2GpzTg2LhuT4HEI2ZgE3C7s/IL2wTKipZxIUhFH2PjV49s4Y7QPzt5awbCwG7/SE+TabeSwqCW9h11jIriUI6l8SO/Gs1TMM767bEwIz1jbL4/GJNuOrd/Ry45JQblECyYsqNx5qmb8ytNJ8A5+pKdVOCndV3hiMX6VkhNnulbDPb4UpGhMWJ4J4fupbvxqms5BwypcE56XngM3rMsGoks5Ts+vWaKe9PH2lzzZ41nKcW4X9lvK4bMxSf/LqjFR6VDaLFowYUBpjUmsaYefemEYv3onzJItMRsTv6Ucy7OcaUpxsMYQRSieXxUwfvWFtgRJtDGRlwlqeVtn5xzpeeXNuURFqlOkE4d5icPGhFSOPG2YdJijO22LYCLg+dVP4M09r55cogUTERT8jrGgQoWWsUYtMw/iyN8uzLsrx+4TJqKlHMU1JqLl4LeUQ1s6ITtYE8oCF/aTfz0edLwXa/FQd+UIxOWOI8wCYl8qDmIoS/JjYlvK4Yk8E7dJC++ISm8X1khHNYvqULsIn9mksjYmLEs5IezK8ZsxOcPbZ6/8+XESl0t6mXEKbxf2ERtpWhK/Oh4WtKUlJ+4BlC1OE+T3iNrGxOu7kO5wLU1z9D+u7cIk41dL4h2d/BoTu2BCf55FexM1CmZJRdRdyyleLyZsqLArR0b9CGNXjn3AI6ieHeGtT0Tmx0ThtgWEVw5Uw0QfrUJYpBgHMecAyrqUk6JoTKz2LKLvGY2+xHGdKECyx+ssR7KNifW3gI2JtY55fFStMSkSVPqO1koVtXvvaLQ1we03wiYugSjorhxneGvnFZ1L+sDJuOOUGJeorQ2Pjxm/pRyZZUS1mRA0tPTUmDi0QuTtwsGXD3nCeX0XUn/GM/Hhyb1ruzDhGZvxK0c9zI4JtCDOOqYFE42NW19Yiq/88UN0EFyvL9vShNN+/TZmLduOjs4UvvrHD/GTfy51PSd6NHbYzFq2Haf9+m0s29KE3fvbMOU37+Dhd9cFitPaoG7/13J8+aHZaEvmyy7bjlfuaMbke97GjI+3AgD+sXALTr/nbayt3x8ofRr/7z+rPO9/tKEBk+95Gyu2N1OfEVrKsfxuaGnHWfe9i4feXpu7RjpH6NmPNuGMe9/Bxj0trvhI6/3/WrINk+952zMfpmniyw/NxuE/eQX3v76a9zVyXPv0Apx137tcYXbtS9etLz802/fZ6TM/xZce/ADLtzXhdJ93yiIyVu5tacfGPQeo903TJJY1QB5MInHy5qNdy8JaTT/btR8fbWjIxwn3e5imyTXwt3V04su//wDnPfg+Tvv123h7VX0ubkssnnFsb2rFM/M2+b9ALjYOIc10/m3issfm4fpnF7uete7K+dlLy/DzGctt9w0YtonClx+ajV+8/Ck17WVbmixh8+lnsZb9/A17cd3TC3N/W4UknjN5wkQLJgyE1S88+9FmLNy4F/PWN7juXfv0AmxqOID/+usifLShAQs27sVz8zd7xscz0wmb//rrImxqOIBrn16AB99cg3W7WvCrWSttzwTRuDz54QYs2dyI1z7dkbuW7URu+tsSbNxzAD987mMAwI+eX4INew4QBTsZvLFip+8zG/ccwLS/L6HeF9nhZC2+R95dh7X1+3HPq3khibR+f+sLy7B+dwv+d8Zyt8aEoDq+4dnFnoMsAKzbtR9LNjcCAH775prcdZbamM3i/rYOvLp8J7fw+LtM3cqmn46TnPLjs9dj2dYmnPu7D7DB552yiAgFD7/nL4DbbaOs17mTk4JNOPIYnNx2SeTn/ufFT1zPuQduDwNNAq9/uhNLtjThk63N2NRwAFc+Md8zDzR++uIy5me5bEwcD6/b1YL31+zGzCXbXJNGq+fXv8wlC0rOz/CnD9ZT0/7+M4tyv7PfyGt57j/Ld+BAewcAu71LksdhSohowcQB0TdHyGl2EDqC1g63JoCEdXCPuk6xyBWtHSm0dZAzJsMzaDuhnNo6OonP0vIRFe0ehxKKyWj5QKR385qNtiY73TYmgsavpPrLSlaYFBVRSd9arvErf2TtDPXMLoyYlDvZ+9xZYErXfp3t25N2j5BodXyX9C4Tt26D53RwFgPQULcOU37Tr9GXRlmcmvHUPeuBp/l27b1Mln2u1GL9muQwsg0TLZg4YOkgo1iSs677eSVnvaeCxsSZBYNwTVbcgH1QzP6irZnGvZRaKtnFIu2Qrixeu3L8jPd4OkWaQMxjYyJaRcLWPIvET1Lpu58hD8hk49fw27WooSXroynTXZbpLcTswjCLDxbZBNGYWHtnl8aExes1R+JlJZahnEFjAuT7j9ISi8Yk5slbFi2YOCBVmLCNSonSrDUbngZb+d9R25iwLj8E6Vj9QpLeWUUXy4C9A3AitisnD6mc7Ls9nLNV0xaBc5DgqfMyBk6ZW0VlDuQy2r6fEGg3hGULLzMv6etsmgvR5Vdn/QLg6c+FHAfluixPQj7eV/1wPpnw6Judh/i54yLvYqJRZulbslH72Q1lL1m/adJDqxslWjBxEMesmlT/rPXWS7qOVTBhKCvDCFe9aj3cKtv4qBqT8LLBhNMNtRWxs3KsO7Lc92l2DEC6rlhTTJn2Z3j6pyDfNxtU1OgubG2CmMbEHoikyaTtyvE7gTcsWDUmrqUcxqyZpvsbp21M2Jdy6EIVWx6CYs+r/5KbtX066wCLxoTnu1s1JtkJo58fo+x967vEvdydRQsmDkhaALeCTvIQR6g1tKUcrw5cpV05VoJky2/G2klYyqEO8jGv5cg+xdOuMSENaLYHXPds9kkutbqMuuQfR/b7CtcRH21EUGSUg3s3itPGhPw7Hz5wFvLxe1iZMKXnNH7lEAxdSzlw7srxjov2LVTp9Zz59+q3PZSn+TAcL1ZeahFMCBoTr5OdrXe0xkRVYtGYEJZyrL89JG/r+n5UTrGysBZVkFltp0+nbRNMMj9ljv8yl/FKS+jNLajnV3+NiVuNbrNPSpm+HRkNFpsKaliB9KyEfTCcSL6cIXi0WcTUImjW7BoTp8E0+Tl3nSALaKyO3QB6MXhpBnkIfCipR3y8SzkAnxbRqjHJ+zGxCJsEeSNXbpZktPGrokQll/h13lZhxFrBnY1b1AmPDNgGU4PaW7AsX/gZY9kt9dO/ZS7lyBzkvJdy+OOz1wv3fa9OP5UyXYKN6IGITqEnWw95jF/FBRP//ARBZKeb81W8ZqvO+8QlgggkE5tQytGPsD6ZMk23nZOzzgkmRtM+8ULWlrMLkF5ph7+UQx4vcnnz0Kha77HsKIsCLZg4YJGaZawI+KlvrWp/uwMcejwqLuUYdLmECa8ttoBjV04IGhOZWihv41cBGxOfMF5bMUkCrujODGe145t1pZ8V3erOO0DwIqYxcZYt4RlK+/czlA0L1t0xXucreWES4uU9qI4moNHsdWTAJaATBK8s7l05/vHxGb+6h3Lfrdim+55ffxsVWjBxQJSaQ+gZ7DMmQj5s2fBYypFuF8AO0YUz0Q8DrUPxz6+fBE+yMaGpSUUESpkl6rVdWEjYtYUhzYisZePuNA3Hs/alHPZsOL9j9ptFozEJt86HYmNC2I9ivyc/D7n4aVoHRgHB7ceE8hxBgCHa2tilCk+oebf56/COgxd+ETuPlzbbz97MgME17pRbjV8JLum9jgOw3tI2JooSlX2kX2eTEFjKCeLoSgTWogqSLT/BxL4rJ/2vzKUcmYNCiccxnkHlEvIaMvk3kH4vu/GruJDrfJJn1pUNK1zOJA2DWExEpPgxIRQH7eA+osaEPwvcsG4VZ/X86oSsMaEvaZHz6BG5+6cUqMubDJotm2DgqAPh7srJ5sdbYMvmz5qOXspRFFJ1CaNj8OsIrPXWWolJW+5o91TAQLDy85Pg7cav6d9yjV/lxSXfwZplu7CvxsSO2zjReX4Lh2Di1JhkvhmLWj1nfycsl7AFjOKAuFwYx99+Brq+pwtH3Ky9uhFXXhg0MOm/STYmTt853vmiLuU44hQlqNdvt1bSojERsjFhT7uUYGPiqzHJXLPe0RoTRWGpMDKGFz8NpjUfNhsTwsw3S+SeXxmluCCdRVuH20+JFZ7twtGchkynxMvGRMSPieW374BG0LS5/Jgw2hk4cfZlPN4js2mK2kf5aYpyzwlWQRkaE/J2YWu9Jf/OXwsf1qUct1zCKhiSlrTY03XmkeW6DPhsTBx/W37z2piQXPh7QdKYWHNANhLP/Gu5pwUTVYlIZeKnvqVVXGcFt/6poudXlYxfw1zKYRG+PG1MmHNESZ9wzUtjQjZ+tXRkHHXJWe+ynRuTjQklP6yQB0Zv7REPYuHobTT3BKX9E5OTaWNCuc5q/OrWhLCnSzLc93MC5oyDfJ1d68IPeQbJIkB6LY2ybBfmeRerzQrJxsS7TeTvtevtwmoS1ZzaXlHdlSHhWP8nh7MPCkocDMkh2DFtF/YTTAgNiUXrxQpr58AyjnsavAU0zPXTEhC9bsJ+3xoHj/bNWSd5vEdmg4rK1KxLH3Ea1/ptF/bTnkp1sEZ5H1td8NSYuLUebOkS6pTpLAc/jQkl7xxaFy+IXReXxsQhkFqagchZOTwTTasrgryNiSUvHvK79TltY6IopMGyrTOVOyK66UCSOa6mg0nqzHPvgfbcb5KUanc3Tpe8vdYxqfk6kIRpmrl/Wcg+b6U12Yn2jpSvZb31Xa3x7W/r8E3XuiywranVdd++lJP+bTvG23rqpgHsa02iQ8A404/OlImmg97lub2xlVp/AmtMPNaQAfd7bN57wLV042frkGV700G0JjvRdCCJ/W0drhN+8zYmDPnO7QygP52ylG1DSzv2tebL0EtFbY+DITMEGj3aO639+C7lwPltzNw7kurH/rYOWz22pmt9PvvcwfZO1zfJPkcrZmseW5Pk07lzmbf+6YiwoaUdTQeTrrad9vJqf3bvgXZ0Wvq+ZKeJfa3pPrO51V0OtLxb08oOrLztHLD3uZsbDqClrYOose3oTGFfq7vvMs18XQW8d+VkxxMarckUUchqaesgCg9ODYzzOdI4lM2n9c6e/W2e+YqK0rgzoBqkSW17Rwqj//dV3HnBMfj5S58wxbNu135M+c27OPnIXvjrNRNt9+5/fTV+++aa3N83PLsY548ZYHvG7m48j/dSjn9DfHPFTlz95wUYN7gGizY14vwxA/C7S47zDfezlz7BX+dtwp+vOjF37ckPN+CVZdsx79Yp1HA7m9uws9ld2X/5ygrfNAGWpRzL/UxZWDuYL9z/Xu73nv3tOPb21zCyrgf+c+Np1Dhnr92Nk4/sDYB9BrZsaxO+8scP8fnR/fB/3z6e+Mycz/ZgzPTX8MsLj8GlE4bY7onYmFg7+hcWb3Xd9xI0kp0mXvp4W+7vTtO0zYa9Zmsn3f2WZ74ee389xl3ak222aebTp3HNUwvw1sp6jBlYjSVbmgAAc2+dgrrqSrCKjqIz6e/9dZElrTwLNzbgK3+cg4vGHYb7vjbWds8tmHinYZrAlU/Ox7urdxHvr9/dgjN/8w7e/+8z8c6qelzxxHx8a+JgfG5gDf77H0sx7fPDcdlJQzB2+us4rKYLtjYeRI+KUiy9fSoMw8Df52/Gf/9zKW75wgh0Ky+h5iHLU3M2YvqXjyE+56xn1lf7bNd+fP7+94h1J5Vyl8Pp975j+/vd1btw7O2vYUS/Hli1cx/e+dHpOLx3N0se3fHu2d+GqZY2/pMXluHMUX1x4i/f9G3nXpz667dd17Lt47wHP8DKHfsI94Fv/mku5n7WgLd/dLrtnrVM1u9uwbMfbfbNw/Jtza5rR9/2Kvr2qMBH/3OW7XqFxSV9c2sSR9/2qitvTj5//3t44+bJtnK9e9ZKfH50Pwzt0903f2GiNSYOvAYIVqEEAP4+P13xZq/d47pnFUpoWHeW2ma2jnHaOjCzTBCyAsGiTY0AgH8t2ebxdJ6/ztsEALj31VW267v2tQnZkPzpg/W2v4f3IzcEP2ddRONXy/3Pdre4fpM6Fetnt34f1vHs8cz7vP7pTt9n/+dFdz0S8krrc59n/d65lBNk9YBHBZ190kumfmtlPQDkhBIAeO3THelwxKUcwsAYQMW/3lKHsjz09joAwAuL3AKhy8EaIZNOuxKaUJJlc8NBAMC9r6Xb31/mbsJP/rkUAPCb11djzrp0P7O1Mf3cvraOXBr/nXnunldXUYUka5nx7B6zvsfqnfup396EyazBWLUz3T69hKAs761xl9vbmfpCaucyoMVrmibmftYAAHhh0RbqxoS/L/AXSoD8t3RSv8890evVrTz3+7Nd7vpKq//PL9jsKtd/LNzClL8w0YKJA1nWCUHXphO2pRx6vG1Jq2Din2ZQz35+DtRE31rULsTa4P2MX72wBrG6d2Zd6gpqzR7GhiFW3xRAul7I2m6e/SY824V520s2r6zfJ4j9Fe+uMufjJP9CXs7vvKDZnpEmVNnvYBU0aClZr/P5sGHTspkmv2Gly5kbITjJN5Bo1yvTAN0A3cYr7E0KpNhpZZJIGFJtmGShBRMHsgaIoDZzdh8VeZwq7zbLgMjSoZCMRXkgGhsGipEeLwvW98l2kkGNX0stnR1rvoJ2NkInVvslyZGlZGdKmj8IPo1JVsDgSyN/zgcpTtLz4u8TtH47y8M03RoTFtLnG5HrCUkYz75zKYOgbR04uaqy5dkOH+mP17DS+aqkb0g6fyqscdbvO9nuGwbVxiRoH0xM25YPdo1hieH2MKuCnKIFExdyJBPeccpZOezn45jE36Zp2ho7y4AQdGbPuguCO17B5kA6XTiovxKbxoQ1HzIKgRO/MmM1ZgWAZIfJtfTjRaeX1OAgmyRv+WXz6nd4ofN5EXjDOp8mtUuT8tuLZCpF7Z1IwnhWTij18DhMywPPGThZvAZc0wzHRwZJIFPhzDAD9jbXaRNSwt35Qnp9WpmQti3H0JW50IKJA94xjb79jrejtf+doGhMrM857S9YOvfgSzlu5GypFAtHPCsnoGxp7chZ3y2wxiTkpRy/90imUg6HbOLpCtmYCC6XMC/lBHgf/kmG/W+iYMLxbbIkO026jx5GjQktLV6DXVI4L41JyjS5BROnFpG8lENYwlJAMEk4NBHWPIU9iWHZKZYlrTFxPKuAzkQLJg54xwe6MRlvPPYANK+e1gruFDI6GVSEwTUm4VRa0Xg7HBokwP+ALFJ6Vi2LXfXNmI8YHBP55Y1HA5J0bPsO0jllByiWGHJusQU1JmQNHrsqmyctVpxl51rKcTzBGn17R8pjKYegMcnZmPgvTTrLTGRw9zqry0TwpRxSnZQqmPh6Y2Wvp4ZBd34ZhuDktzRI1ZgYaggiTrRg4oB35krrtHg7My8HPLTZlbOhs0jifEfSuwlvKUcMssYkmPMim7Egq8YkYCGIbRdmv++7lNNpP4I+yOvwaKrzGhPONLIak5C3CwPBhXFi3TCpf1BJdqb4NCaZ78CyNOm8zuzx2BLSeynHDK6tJUTvJZCFAY9QQdNYxmH8ShMaEwm3xkQFOUULJg54jRDpMxC+dJ3PW9ub9ZaXYMKyqyJooyC7Yo5PMiH7MWEJR9dQlVrOnWDNFq8zpyjg2fmRNn61ap/E081pTFgiyTzCWy+9NCbk57mit4fl/bSOtEg2BSJl3d6RovZPnhoTBg0g6TwfFuxLOd4aE/6lHDuk6Ek2EqKCCUvPz3qCu8vGxPLqYZ8C7+ds0UoJSTBRAC2YOOC1T5CmMXEZv5I7E9tSjoDGJCh+GhPR2aVoZ0Ia0Fg0Jl6dQ5nAUk7wXTn8UGe/BMNQf41Jyv68QH6y8CjlsgO06HZhv5N7nc+LENz41XHftOeRNWvtnSmq0E26nu0Pyhhsptw2JqwakzxewrnTUJ8FpqUc0jbpkOYIpmmyCyaGvS+0Hx0iv5+2HwTphjY2lBiGq1xVkFO0YOJA1gm0vB/XfcgT+Z61Trd32l1HR2H0RUpBhupUNAabjUluu7B/OC97HCHj18BLOfxh/M4O4RESk52mFAETyGsIWGLI55UvjexnJ7ukd1+Mcruws+xIRqEpgbJOeggmrBoTGqRDHVmw5t1TY2LyLyM7+2LiUg5hBOPx3+OVHglWzahh2P2DpBjLSQakb+e1K8d5Kyw7Qh60YBIQ+gxEbAaYhb4rJ/+X87C0MNdWc3khGhbKiFcsnFXAyMbBojFJOgYLa5BSge3CQY1fZe7KIW2l9auPyU6n8as42b6baSUnJ2BwtpecREOP0/48V/SO+LwD+/mBIC0F+c1wSSQ7TOpSDulqNt0Sm/Erpb9yhmXMlG0px8vGBMF3BJIgaUyEfbIwwCNU0OxKwu6nyfWfIpgYcH18BeQSLZg44d8uzHedhld9p6kEnarRKHaGkFKQIWGLNlb7rpz0vyxHintpl8pK/DtynvhYEHGwRksxZxhqusuGRnunfbtwkE/K46chmwxv+eV280Rg/OqXNb/BiqQxESnr9s5OooYAIM/2s+9cbtsuTA7vEq4Eysvru5tm8JNrSXki7soJydDUBHsfaxj29hm6gzVrfSLcp8mEpinJRlAyWjBxENeuHNdSDoNLepfxaxSiruTZaC5aUY2JoB8TpyGe9R1KEuSyZ82HCGJLOeTrJI2J7+DaaUqrP9myYIktv12YLw3PpRxSHQ3RxsRZl1jsNUzbb7a8tXeYXF6N80s5LNuFnWHZ0rCGS3ou5Qj4MXF5fnU/QzR+DVE74efdNosBuufX0JfcOep/yjRd314FMUWqYNLS0oJrrrkGffr0QU1NDS6++GLs3Gk/1GzVqlWYPHkyqqurMWnSJCxatEhmFgLDO3OV5sfEtZRjictSVaztwuXHJIKNIaTXikQgomDtKLKDnMh2YevfZQKCSdB1Y5n+1UjLIyy7cuyvIP4+UThYy+/KYdWYcEXvG9b0mCA4H3fOkE2H9Su7xoTux4S4xJpbyrEuTZITEzd+ZRtwUwIaEyYHa4Ty6BAUAph25fBoTKyCSdw2JpTv2ZFy14iiW8r52c9+hldeeQXPPfccXn75Zaxfvx7XX3997n4ymcRZZ52FY489FvPnz8fUqVMxZcoUNDU1ecQaLdwzV+qslS8aL8+v1sYQ1I9JUPycV4nmQHw3jyWOzL8sRmxehnjWGWZUnl/FjEwogwxhp4vfa8jcLtzJITTkhSi+NPJ+TAhxyjZ+JXb0+d/OCQKLszKbxoQxa8kOskt6pzOvLPmlHH+Nicv4lfGD2DQmXrtyEFxjQvquXruRnL+DYpp824Wtk8gwtTiAUwPnhtY/daZMJYxdnUgVTNasWYMLLrgAU6ZMwSmnnIKvfvWrWL9+fe7+rFmz0NjYiPvuuw/Dhw/HbbfdhtraWjz33HMysxEI3gPg3luzCy8v3YbWpH2HzIrtzbnfqZSJOev2YMveA5jxsfuYdADY35bEzCXb8Pf5m7F8W5NtcP3Mcux6tqG1Jjvx9qp6Wxxvr6zHnHV7MGfdHpimifkbGjDj463Y15pkfp/2jhT+88kO/GPhFszfkD7Ce3PDgdz9DXsOuMK8v3p37ven25pz4UikUiY+XLfbfV1C29i69yCWbWliWsp5d/Uu1zez3ltbnz7anDVb1oa/btd+3+dX7mjGPxZuQX1zKwD3bG1vSzteWLQFH67bjQ/X7kZnynQNFrPX7iHGvb+1A20dnfhgTb6cUya53LN8sHY3Glrac3+bEPcS3NmZ3hr6xoqd/g/DRHNrEi8u5jtq/e8LNmNHUyuWb2123cv2s6t37sNbK3eiozOFZVvEJz9zP9uDuZ/tse9AsZSNU8h11hnn4OhQmDAv5SQ7U1iypdF1vcRxYFyWD9buxv62Dt9D/F5eug0t7R22a2vr/eswALyybDsOtHegNdmJWct2UJ9raevE/A17meJ0sq81mWsDTnbvb3Ndsy19p0ziTpr5GxqwxxK26WASa3zeec5ne9B4oN3zmSyfbGvG1saDub87zbQAMGfdHsxeS2+HrMxeuxv7WpN4d/UuzFq2HW0d+b6MVBf+sZDcvpZsbsTmvQdt11bucLepqCmVGdlFF12EBx54AAcOHEBZWRlmzpyJr3/967n7ixcvxrhx41BeXg4gPbOdNGkSFixYgGuvvZYYZ1tbG9ra8hWouTncQuOdt17/7GIAwIXHHYb7vz4WANDQ0o5PLYLJi4u3YtrzSzzj+c5TC7HeIoCMGVST+/2rWStzv7OD0/+8+An+uche2d5aWY+3VqaFlUtOHIxnP9oEADh6QBVeueHU3GDrxfSXl+Mvczfl/n7j5sn41p/meYaxvtua+v24+OE51Gf/tmAzbn1hmeu6DAOs6S9/CgA49ajevs/e+fKnWLm9GfdcPMZ1b+HGvTjnt+/j0+lnM88mrEtK5zzwPlbcebbn82c/8D6A9Ixv/d3nuu5PfeA97NqXr/e3fWk0aruV2555eu5GYtxX/3kBRvXvgectndGzH23Cg2+tpebnnVW7bH+bJnDvq6s834FGp2ni6bkb0Zr0F2xME/jaw3Owcod/3bTS0NKOiXe/SY4TacH9Cw+8B9ME/vvsEfj1f8TeBQCe/Wgznv1oM/5w6Th88dj+AOxCm98Shd9ZOawT1nnrG9B4wD3JSG/5dEfys5c+wT8WbkHv7hX5tAjx/uCZxejd3V63vunT5rPc8+oq7GvtQPeKEuzICNkkvvPUAqb4rGT74ssf/wiLNjWiW3mJ65mrnnTH67TneOS9z1zPXPzwHHQpK8m100seneubnxsyfT0LM5dsw8wl22z5+NeSbfjhcx8zx+HFpR7fh1SfPt7cSHz2tU/dk4cP16UFsJqu5YQQ0SBVY3LllVfiwgsvxIQJEzB58mScffbZmDZtWu5+fX09evbsaQtTW1uL7du3U+O8++67UV1dnftv0KBBMrPsRnCx/8XFeU3Itka7BDrrE/r7ZbEKJYBdS2El2+acQomTrFACAMu3pYWkHU3u2YUTq1CSzYdXh8PLK0vJZSFTm7hwI9vMzDpwH96rq+1eMjPrZ9XkWFW87Z0p5vX07Hs7FXVWoQQAXlq8Ff9e5l+PAGDZ1ib8fYG9fuzezzbTy+ULJp74cANXmCydKZNJa5ROB9xCCQt7WtpzZWvVHJE44fCenvezvG7pxGk+KgC4Rn+SYOIZnsKcdWQNWamH986PNzeiW0V+QG9pI2sJeeuHlfrmVqzeyfa9eci2iUWbGgEALe3kvDuxb80FnqTU44MWjal1IhkGHZ0mXqb0fSri7H+iRqpgsnz5csyaNQv3338/7rrrLrz88st49913A8V56623oqmpKfff5s2bJeWWjAwjROdykHX7KSullPWIILYMIqr5Zo5lIBa6EmY9gFxL8AOMHZgVerGK2Zjw+mzwq3dlJQlUlJLLLgyCbRc2iUaJstOhYQC25UuvrFSWJXDykf4aNoC+zOv2Y2L/22mXYIK+ldQLmgBD8t5ppdJSb5oOym3P2XyR2vVtXxqNUf2rpKfnh7XtkXadxIHTT5DqlJfGu2FX6lLOtGnTcM455+Css84CANx1110477zzsHHjRvTq1Qt1dXX45JNPbGEaGhrQv39/apwVFRWoqKig3peNDM+vTl8DIoIJLUwQwykxwaTD/yEOuleSq1zcjZZ8BhC77YtzcOE9O8ev3qUFk+g6CzP3P346Uibz0Q5h+FAwDKD5YL7eeu2047EpszZJ+8Ga9udcO1x8lnJYBRPaU4mE4Xmej7WMmw6Ka0ZopEzytt2ShIh3njyioZMWbaUqxp0dKTMSz9yyEBmzZCI19Tlz5uDoo4/O/T169Gi0tLRg48b0Wvj48eOxaNEitLfnG8fcuXMxduxYmdkIhGhDsmo4ZGhMyihupIMIJiLb1Jolz7C6V9AEE6nJcMPq34GGs2x5y9qv3pWXJlBRFqFgEuCDpFIms4Af1ndnrbd8golYm/SrC0E1JqUUG5Ms1lthaUxIRzwYhhHIo7FoWOsErDMlzz9PEJKdKa4zpOJGpidqEaT2dCeddBJ++9vfYtmyZVizZg2mTZuGAQMGYNSoUQCAqVOnom/fvpg2bRrWrFmD6dOnY8eOHbjkkktkZiMQrR38ywCA/UM6+6/yUv6vTOswSZ0YySiMhIjGhNUKnZVuNMFEair8kPou0zTZPYs6vkvQrZFOykoSKC+JbiknCB0pkzqIOwnruzczLuXwdMBWYcuab6e2gsnBmuWSl2Myr3izkM47saef/x2WYEISvkoCCiaiJG02Jv4tOIqTwZOdqVAO7wuLuGU5qUs5TzzxBG688UacccYZaGtrw4knnoh///vf6NKlSzqx0lK89tpruPrqqzF+/HiMGDECr7/+Ompra2VmIxD7BJcukp0mfvjcYnSvKLVtFQbchq0s0Bp0Z8rEb99YY7vWu0cFWgjbeK3c9e8V1O2bLy7eggvGHoY/vrvOde//3l/PlmFGaBoT61ZVVdjW2IqfEnYQkXB2zNndUUxhO+3H2U/7u3sHV1mJgcdny/0WXpim+DJLW0cKj33Allfec2hYmPtZA8YMrGF6lktjQnnWKXg4y825nXh/Wwd++2a+Da9i3J7ppTHxKif7Uk4IgkmK7I6+JMHvfsHKL15Zgd+9ucb/QQfupRz6syf/6i2MqOshkj0uHnrb3beqTNwilFTBZMCAAfj73//u+cywYcPwzjvvyExWKofVdCFuyWNhxsfbiNfnfkb360GDNuOc9ckO2+4AAOjdvQIbfQSTRwlb5rLc9Lcl6FdVGWhLJSs0o964IXX6j7y7LrcjgJf/nbGc+VnnYYykHVeLBfMRhLhnTYC4sTdpiygJVs2O17OuTTmOv50zcmdbZB20qBoTw/AcSKzhrLY3skiZJnGZwjCC2ZgAYjZuSYfxq9dS+tbGgzZ/I5o0cdvl6LNyHBzeq1vcWQBAn2ls3etuRE4fBCJs8hFsZBGFd1onVj8OVvzOxNlFcN4UBm0dKV8jk5Y2+QOKF1Ed7OVXHcLWfvegGGOTYDm/CiC4pJf0ErRvUuJrY5K/x3rWCykNGimTojExjFiMFawaqs4U0C64PH8oE/ekRAsmDlQ5aZFqjEm4Rht4eaB5QZVNHBX+K+MOs/09ZWRfAM4DAOP77m0dnb4zy+quZZHkJUt6KSeCdHxSCdtwsaqSvVxpE2/eQ/5EockUpT42JtZbzmUlFmeEADC8H325I2WaxDNkgu7KEcW6XbgjlcK+iIV6TXC0YKIo9MO23Nd7yRBMAh5JzkocW+acqtwy29khZuZfd7iohKi2ZMp3YkmzzQmLqN7dX2MSsmDShUNjkqAYv/os5cgSTGjq9YSPjYlXk2NdWvXya5EyyVthY1KY2Mq7+WBH7LP/QiTuMtOCiaLwjN81XYLPpqPSmKggmFjPDslmJ06D+baOlK/PBh5bCBlEVRyiSzk8A55XnePSmDCf7OvYOi5pnyjtNWhn5eRy43GP1ZVBhcdzKTO/XGUtopKEEcj4VRRrecveVXioEPfKgRZMHMQtKWbhmSnK8NLHcq6JDOIwqnKO6WXE04NjXsrx6b+j7t9NMxrHVH4p0ISKMqcXQw+8bDxEbUys+GtMwrcx8fpUXqmXMfYdXn2MadGYWE8yLpFg/CqCVWPSGMIupEOBuHc2R6sf1jDz2S72LcYyBJOHCVuFwyAO41dnilb19dT738OAmkriWSFRzRrO//1sX180UXfxt/xjaSTp3PPqSs/7Y+54jXi9tMQA68kDXv4jeDQmv397LU4a1ivtwt7m+dXE26vq8at/r8QlJw7Cm46t4qIGp052NpONsT/d3ux5Vg3tfCoAKGPUxNEcPgLAhj0t2NyQNsovL0nkdpkFdbAmivXsJdKBoRp/9K4cDRckTcqouiqcMaJPDLnhJwJfRi6cZWb15bB+dwtmryUfjhYlfgeUydrZoRq0wdYPHm/KXmXXhdE5YZYnCL5kUqaJK5+Yj1U79+H2mZ+67rMe6BgE0YlFKWM5ek1+skKJ87m08aua7gE03sTd22jBxIEqSzk0nPm79ZyROHZgNR67/AR8/fiQT16WQBySuHNcOshoT6NSXciqp0fW9UDPiHfoOBniOIk5Drxm8E68lkV5bSCy2gBrjH71JCr7LRFYBbxyxgMkrfElJBq/Xjt5qJyIDkFOH9EHfXvwbZCIu+/TgkmB0ydT4RIJg2u9PC7iMH51CkOspw+rpKXICiY9u5ZHbgjrpGfX4H5zglLKY2PiYeMhoyz97MFYBeE4KGcU8MoZBZgyy/EbiYS8pZyj+obvnbVYqelShoPcJ67rpRwNB87qYu1Y4z54iYU4xnrnuMEqmKh0Gmh2OaC0JJ6dDlbiPhIdsA+Afnh9R165hHQ4oV81icqwXAQZSzm251zGr3Lqqoydh4cqhmHgAKdwrDUmGi6cs3/WU1xVIY6TPp1psqrWZR7uFdQVf1ZjUpowYteYVKggmHBoTLwMrkXbj5fnVyfFsJTD+s3tSznyNCZROxgsJgyDf5IV95Qs/h5GMeLev+2HS2NiWDUm6gspcWghnEkeaGfzBLmjuVVaHhIBhYm8xiQRu8aEx/A0LEo5bEy86pwMIa/J52ytqJwXisC6lMNq02MVYBIJeVpcrTERR0RrpTUmmkAoMEZw8fTcjZGn2b3CbrjXo7KMqcMU3TFCguaci5WsL4zShME1KIeBCgcx8tiY+C3ldCtnt83Kvrl1AnPj3z72DNPKvb4fHbKXcsocSzmyCKox8duOX8wYBruNUJa4J+gFNqxpnPXFqiWJf7hQkytOPgITh9Zi6uh+OG5wDR685LjItQ5BhYns+R+lJQkpHf5lE4fguME1eO2m03DKkWznpWShaRl6VJbihilHBc4bC7I0JgnDwKUTBzPHJVL0rQofIsdajuUlbAN7uU1jYjCd4zWiX4/c+VU0upSV4Fsc38nJ7ecfLRw2Tq49bSjGDa4JFEeJYeCZ70xAlc/miB6WYy+0xkQx4v4gfngt5WjJhEz3ilI8992T8Oi3j8eL3zsZo/pXcRs9BoV3xuIkO7iWJYzAy0IAcMbIPnjxeydjeL8e+NPlx3OFpaX/z/+ahGF9ojmdm2fZ0kswMQwDXctL8YMzjpSRLSIq25iwCrmsGpNSh43JeZ8b4BsmkTDw2BUn4NjDqunPGAbu/PIxTHlwMrRPNwzsGf8WdxGO7NsdL3zv5EBxJBIGjj+8FjN+cIrnc3+5ZkJul2fc46AWTAqcuA0hC5WoNSay7DJKEoZUFTnAXxa0pRwD0dk58VR7r23fWYUBb7Z5Om7+rZrqwWpjYrVZSZ+Vw56G1zdIG9KK1a1SiduWo0ZG/56Nwi8qwyAvVcaBFkwKDPeuHMtvrTJhptCWcvLxJKRoTKzwdn40wcjasYUNz/fr9HAJz1uWIu+nsvErK+w7sSx+TBgdrBmOf4nPBKhYJYlEwfaMMgSTbBx+44N1F5XWmCiG4is5nn5MNOwU2lJOlvR24eDxGI4BhAf6YG5E1n54suy3lMMTX/Z5no47Cpf0orAO+KxLOdaJU0KiH5MgE4m0xqQw+0k5GpNMHWcSEtUoJ/VdhUaEaZp4eel2rNm5z//hGHF2iPbtwhFnpoCJuqOStZRTWiJ/KYe3LGSnHzZeO9Rz/T7jO62p34eZS7YpP4GRDbNgYvldwriEkn3G6zsF05gU8FKOhIxnBRM/7aBh0XDFrTHRgkmGOev24PpnF8edDW4KdSYQN/vb2HyZyELaUk7CwJItTcEjCpAdWgenalX0Ot23hFNjsrnhYEH2E0FhFax7dcsfV8BrF+K3e0qU0kS8eoD+1ZXY3iTmE0nGsm320/nFZNVvaRsTRVhTTz82XGVsLulDTqtQTjBWEVZ/EVHFw8s3TsgfEEnLQlSd/7TPD+d6nmXAU0GoGtqnG/59w6mRpsk6ZHcp898ufOcFx2BEXf5Mm5KEu05cMJa+S0fm0QFW4taYPPudicJhpWpMfOJKa0zSz8R9GocWTDIUwgF4gFuSjWqc+tzAakw9ui6axIqQMklGLXE5Nzv7mPy353FuFgZjBtVwPe+1KyfbV6uwtn7DmUfZBnaV8BNMxg6qwWUTh6DC8lzCcJ/rNGFoL1fY7CNhHB0AZLWV8X3fQbXiW5Wl2JgksoKJ/7P5pRytMVGCHpWF4fLYWV9sDtZCbHvxd9uFjaxdQLKEAt7cWDtI2rtEtawoc2tvbseCAhU8yl1NvFT4CCbZcrS5pOc8KycV0jS9JJGI9fsG1fYEpSQvfXtiszEJnGowtGCSoVBcFnsZv4aJtmUJhqzii8sdvVUYiXspR6Z2I7eUIy3GYETdzFjTqyzzHiqy46dVMCkh2HaQkss+5aXZCkLcNiZB+k65fkz848qWVNzGr1owKXDsNibhNT+VZ3OFgDTBJKalHGunVmjGr17kJpMK5D2IE7Gw8TN+zdaPilLLUg7nNt2wDvgsKeDtwjI0rfmlHAbBJPeIXspRgrhVV6LYHKyF2PbiPtG20JFVfrL81vB21NZk494uLDP5vPFr/PVbgSxQ8at2OcGkzLqUw/dOqZCm6XFrTIIgcymHZ1fOVx+eg/fX7AqctihaMMnA2yas2+KixGmUFJWDNQNqd5xhE7ScZQkmZSUJTBrmNiCUxZF9uxOvW7UkJQnDduBXFgMGjuM0TI0blRwUqj18eueNZGNSYhCWcgjRZK+FtZRTkjCEv/OA6krJueEjq6g6rKaLcBx8GpP8Uk7TwaRwmkHRgkkGr33bv/7q53CH5XTKb00cjDenTZaSrt/Jrn5bI62VLcxuzatS96gsxQvfmxRi6vHyyGXj8ZVxh1Hvn3ykv6AgS6grSRh47PITcLZlh9TxQ3oGjnfhz87CazedRj2Ez9qvJwwDH/z4TNczhpHegRCkEyXhPGBPZj1XSC4h1pHShOG5xVY2K6afTbzuqzEhGb9yHjgZ1lJOacLgcKlv5/oQTst+/Ar3oZmGQd75VJIxdv/PjafioW+Os937+Xmj8fL1p/ie4JzTCvoUgXO53rosFzVaMMng1JgM75efOY4ZWIPjLEdPj+5fjZqucjQmfkeDHzfYPug4225Q7efhvdi2snkNrBWlJRg3OPjgqCrHD+npKZhFuX22rMRAl/ISnDEy71Omb5X/0fJOnG/Tq3sFhvfrQa1P1qWO0oSB6q70XWxH9SNrXUTxM7wMQs4lvQICCikLZSUJjBcQPEWM+Wu6lqELJZzfUldW/ihznC7sNn51x5O9Ep6NSUJ4kC0xDHR3aAd7dw/W9x83yP09j+jVDf0J2pnsMkyPyjKcObKv7V73ihIcc1i1r9DI6mDN+ZCoMCcDLZhkcDYJmybCsDcouWvcpNSd9/M49/rb1mUFMsa6ti7z3ItCo7TEe7shy6RQno1JuslG/S2sdiW+rq0lp+2qo2HYmChQt2nLHCL2L7IPevQd/DJ5tArpJYpsFy5NGDbbFy4Mt+fgoG2ZGJwSpdecpzPFlh9mB2twaky0YBI77lN7Dcfflt8S0/U1JHTcduYz6CyDtY15PafCbDNM/I58Z+moZI0TpLxEMajatwuT0wurHrjlEnmePHOzSSXqMFmbIGIfwTp4Wvs5L+2r78m0mTyWl1oFWD6hKjQbkxLxpRwDQGvSLpgEtUsilSXtezknyFayk1RWw2QeGxPA33dNmGjBJIOzSRiU34BkjYnv7NN+3ymI2BQmAumzhkkcwvuF0+pp+suzdL7SHax5VVAGaNmhDQ3W52nCdFg7W0hlJ2sDB+/pwmxxioUjdQWGYQgJtSKDZ3bSQzqwz++dsslZNSakpRyvgvby/BqEEsMQXsoh1enAbZn0nSmPHkx2UqPJfi+/dsfqRNBtY6I1JvHjaBNWFZrVIx4g28FTOkbv+3mcgknQxsw+swqUTEFT6nPWBsuxALIG7bB3kbBUJ/9TSuXmMdSJQQg2JqLbqWnlJrSUI5CF7KevIhzP4ZeFbL0sswxmJtjynuvSQvLZUJIwmE9HdkLKfWCNCWXJjsTBdrpgkl368jNxy2aXpRpZn9GCiQI4d+U4B2wvYWTycPHD7dLpsJ8R4dR2HjOgyvKsaPrBnsveeexyt7W5bI45rMr/IckYpJmfBb8yHFzbFeccw37OkNXQ2gl5KQf43/NGo6ZrGS6bOIQ5HRaqKktx0tBeqO6SN3bNZsG5S4Cn+h17WDWqKkt9t91fNO6wUH3oGLl/3Wk4dwOxIppfUihDMD5WYcb2VKZveeQyezv+yriBDAfApe/3r6rEuME1OPGIWnQrL3EJSF6xPHnlCUx55mVgzy5UYeLEw2vRs2sZfnbuKOJ90muHMTdw1r8vHluHob274fjDe1LDXDR+YCY/bMtsPJ5fAb2UowReZ9AAhl0qdXzf2m7l+NzAaqF0/Wef9r+txq7fOGFQ4NNmeWxM/B6dMqofLjqOvq1WBn++8kSc4NFY48Cvwb97y+noyrhL4lcXHYtjD6PXpZxa1nLNMAxcdcoRWPzzz2Nkf7ZD4Oiilr0hLLltKp75zgRUWQSTzswj536uv+1AvWwxkGI+f4x9y+vZx9RhyW1TMclnu/yt54wi2JjI03Dk8kyI71jBNi16ZDzNKFKkiQfRmIwf0tOmYbh28lB/jUnWjiFh4J//NQl/++7EjEDPnhG/uiDK50f3o947ql93LPr553HNqUOJ98mCSUCNCUM6f7h0PN6cNpm6BDWyrgeqMue7WfMzknAIJKuDNecTcWpMCuNI3QhwCibWhu3aleMKawov7vipfZ0djFUwIRkF8sKzK4cehy0ToZIwjFhOtw1i/Gtw7E7we87LNXgYNh7ZOK0O1Q60deR+29qJpx2O/e+2jhQMw/B1sZ/2Hup+RpqNiVeeBeMUzRtRxQ+xgVD24Om/88MS1sNgU0W82g3RUDXwUg6jNktgmZ30nXiMX5OWHUh6KUcBvIxfAYeNieMDm4TwrPjZmDjv2XeuOZabBNoLaxDaAOGOL9yeKK6Ozuu9ZNp9+M0x84ZsdEE5DKydcYtl3Vt0AGzvSDGFJx4EJ7ES5Nff5cUp2hfQvryYjQn/oGZ6Tnr84qHlne25MAnSJ4WxlEPWmDD0rZRH7OdYEe5zGL8mO62CiV7KiR3nNlynR9WwlALpSuNlY2L/u9Oj8xBLn/VJtllF2P0Oj/ZBbrr0e1GeI0S0MRERSClhWGb7LTSNiceyiPNSVjDxW6ZIJNy7UqQWt6cmLOKKRio3Q2xXjgjUHVnwLwvaXRX8w3gRpl0eT5pBYvTTWua3xPunkm2XgL+bhDDRgkkGLwdrgFNj4ggbQK3M6hwni5ffEpFqxG78Sr8XZf9tGPEfye2E7f1Z13K8O5CSGJaxnFgFE68lTi/aO9NaFz9tE+3EXWk2Jplcy6zCzkkOK6S2aBhiu3xEqond9UBwbSwpXBxDXZC6Qq57QZfJxOozTcizaUyIGh5G7RnsgkmcB1vG38spgtv41frbrjNxfq+6AAc9+R0SZSDtKpp2LyjsSzn0uU9Y2iRaPuLAc3klwjyVkoxfLb97Mh6VECTHvSwuucmvTo59qOUcnrzGxGcph6AxMCDTj4n9X2c6Iogv5ZCvhbqUY/k9lHJOEkt8tHdmyYeosbAM/DQ6pLtB/MoM69ONWNeWb2vmjzSD3abHHTlPn5nsVGPWpwWTHE7Pr5bfrr/Tfzx+xfG4YOwAXH+m2LbCU4/qjetOH+b5TLeKEvz92pOI99zrt/x5YDZ+ZawpQcdo0qm1tvglpCGCtZxOPKLWdo/NoyJjOj73S4lLOflrXzi6jmiZz4pXt/TklSfggrED8IMz8geb8Rg+/9+389tQsx1g1/L89x5c6z63KZFwJiIXw/Gv7Z5gsqxC04mH2+sRUTgyxLyW8gxGM39wCs77XH88/K3xxPuG4V8vaZpcUjb+fNWJOGtUX/cNAM9fdxK+NGYAfn7eaJ8U3dx0lveBp49eNp571yDZxoS/YvzrByfjvM/1x2OXy98STVpOtcJjAxfWeUW8aMEkg3tXjkOVaf2d+ePMkf3wwDeOQ4/KMqEZ3ANfH2vrmElUVZZheL8e+NKYcE4YZa2zXm7AZar87vv6WM/7cWlMrPyvo9OMcnUluyOJVgwlCQO/vPDY3N8iB8DROH1EXzzwjeNsB/jZl3Lo38YwDAzrkz/cL6sxsR6Qdu7n+rvCJUgaE0PiUk4moqjV1lWVpfjZeXbfGbTyExFMeF7n2IHV+P03x2GQRTB0hvdrd87zZHLxEPI1eXgf3E9p5yccXosHLzkO/TgPpjx6QBVOG+693Xjq0XW+/YsTsvt4rigAAEcPSJfx4b3JGhOmvLi0+O7r5F057rhIflsMw4hVe2VFbxfO4HeIXyKERQqWzjDrP4KsUnSuA/PnUWRLmudzxborxyNdmYOan3EvaXstqfPPQu1EpQ3s7t8sxdFGEExIeS0xwj080nMpJ8S6Rur+actJIl5LRc7K8X7Q+3Z7B01jQg4YpSDo3Xb5w4ZhYwLwLQFa7ZhEbExoWhRV7Pe0xiSDp42JQ1tA9KsgIGmySN5esyUZTZs1jqhc1/sFj3oAYckDi42JrCwSv4PH7JZ3UBc13PTDmYu2jrTxa3eL+3OaUaC7nRjSOtDcdmHCvdCFbKeBKekZQ2zbZtCcO3Pm11dRNSYEbRdb+nxvkNaihTB5JFwLwyV9sPgM4u8srIKJgdBOBeBGCyYZgrikF4UlzryqWXryAPh25SiwikIevCJO15kH2ds52eqFV3i250gE6ZgMx79eZJdyrDZFtNmpDFsqOhxqHsm4kiRmwUBFWbg2Jiz4DfpW/xe2cLT4AuaHB28Havxhw9q+7ZsX62+KloSUtxRBiqcKV4pIJlowyeC9K8epQZGDEbD0nY1GqC9incFE1HGLqFajsDuJbCnH5z5JM+e1tZNWNqEI2hzl0J4ZyLoTDoxjiVeejUnmX+JNOWmwRk3TGIVpY8L6nJ9RJG03R6RLNmHEGcpSjlzsSznu2EmCCa2uqWJjogWTDH5+TKxI6xTlRBMIVul/4tBa6mBGsjOQidWuIiFpBt2TsgXbSbfMGTdeWggW1a6sDro6Z3NkVd/an/HzBCkT5qW1zLXsoX2nHZU++PKI3t2cj9CC2v629rV+BwF6kdPykN5DOFZ/SN0/rRoJLeUEHTwdNnZ+wlEHRWPi3uodjgZY9GgBEcdxgT2/Cr48LZxdY0ISTEhxkdPQNiaK4fb8ar/vtDnhgbTbIB2ndzxv/+h0S5r+CJ2Vwxjm4vGDmJ4Lo2L37FaOv1w9Ac9fdxJlbZT/vWf98DT85uIxruu3f8m+4+b1mye703MkxzujHdW/CjeceaRtULbGTasWh9V0QQ2jn5JcfNw2JlyPO9Ly55UbTsW9F4/B985Ib5Mf2LMrnrzyBPzzvya5nr3lCyPS8fq0k79cMwH9GX0JOXd75JZKBcWQrx8/CBOH1rquv3bTab6nE7sFbFLdFtOYkAbPI/t2d19kpLKshLqdGPDQmCgx/WLjPzee6rpG/iZs73Tbl0bj/f8+gxCejKjxq9/ZRGSNCfDP/5qEHg4bL0XkEi2Y0HB+bL+P79WhDyH4Z2CBNHBZkTHrYJlRdysv8Ty4SubshzZzPeWo3jjhcPcAkHuAk7rqSnwlc2y4lS+Ptfs5GFDThZqvLCy7JqzBvzVxMG6eOoLqOI/GyUf28o0bYNNghaHZYomzrroSXx0/0KYFOH1EX+K25uMsJxfb07EnNKp/Fa4+5QjXc9Vd3OXrFLCDzKYB4OLjB6Kmi1tYHN6vB845to4eNzE98jVZNibD+7kFE1YtFQCcNJRc/wAPGxMJ2k0WvAR6VkbWVbnjJTzHqoX81sQhti3YuTgllwHtAMUstGW48UN6YvLwPrZrYRm/86IFkwwuGxPQ/+atV9TBgSsOluUCjggz8Nhn0N/DW2gLiq/difwkCXmwvKMjRa8Tf/nT8RosyOXstZQT9ho/yShYeJZMtYdhftQGi8o9Z2MSIMu0gcrfq6jh+Jv8TLlA/SK9e5jaiw4OB2th54U1D6Jhg5+Vw17Pafftxq/W3+5wJI0JLS9qiCVaMKHi7Nydfk2ceAmaYTVCVdSk1vIIKnCTd904O3D735EYv1p/O5KTebqwDGiG2iyHcvF+PlZjOZG66nWoHEs9Y6kX2WfIQgEbou2QRZtgGECpgGBCHPxEhS+G8HSNSYQCSCgG3e5rIu7+WRA/oZ4spGQh7eSm1TVFFCZaMMni2i5sKRkDzg8ppwEEbbOujk0gDhU8qQYl7KUk1zOOv0lOz7zi9TbU8/KwSw9D+9uatVJLpQ7lqwfUPlCjFVwO4NnNw2zESwzMHqf3fXkFF1gu4SyPDqqNCSV62XXE855He/PVxrofUGweQp2IZOlk3JWjElowyeBeyqGrWXkblYxGGFY1YmlkPEJ0HEs5kQhXHknIXMoRwb2UY72X/yPsY8y9PoOIwCeaVhaWz5JbyhFuYYa0+idzZxD5pOIg0pc37dRdOYWxZEOP1H1Juldd1qxQovNbuk1JPpE+CrRgksHPj4n1C/J+TOqsIWC1+KrDeFOkHVgrcq3gtktrsryqwG+fNIQeGf0S130eqFuiPexovJZystuNmdM3PNagmTUF+d82jQnDSM1r/Ga3MQkHt2bQndIXjnYbmhIHZ8ffOQNzYr0TU9lfNjFdp3ln48zCBAOkKjnhCIrxOAH7RMxwXcsyNFN+t54zkhyPS9vF9j4TLDudzhjRx+NJfzwFZl87IFJ88mv6F47uJxyW1t6zTLaU36DatDH/acODlWnY6LNyMnielQPDMTDFIGc6kvzJOSMxqr/bijzLHecfjdv+tdw3WmtFfvyKE/DWip343VtriUmH8d53nH80Zny8DU0Hk9RnfH0NRKEwsaVhT9BLEzHnp1Nc4aVo0Dxtngzib9JgEwZRfA+n/DSotivuvXgMfvT8ktw1v5nty9efkjtEkzwA+ecjLUjm/77zgmNw6YmDGcIR/PFk/n3iyhNw5RPz/RP3it/yRnecfzS+PHYA5q1vCBanJcPfP2MYLp90OPp0r8CufW3oW0Xers1SFUiycO/uFfj4fz+PlvZO9KfE7cgcQ0r8sHp+7dm1DK/eeBq++vAcbGo4wBz/904fhksnDkH/qkpMue9dsTza8pb/a/qXj8Z5nxtgm3C+efPpaGnrQM/MNdn9kiy0xiQDjx8TYnivmwFnwCT6dHefvmntjHoweNTMhspSYhjo3YPvVE/Ab5D0D9vHkqZIkUgdZAWiKvXYP9ilLIpzTpwzb/LvsDueIK6/0+Htf2ebpJdnWyu13ezbg4mfxRK4qtJySnKAwrEOBsP7ds9trfeajZM0U9lorH5LRLNlDVdemkBN13ImDRJz/DDQt0clDMOgCiXpfIj3fTVdy3FYTRdPVwUsBAlNCksTePtWVeYGfNZ0a7qWMb8jy4GI1jpfUZpwacHLSxO2PKqKdMGkqakJ3/3udzFy5Eh07doVDz30kO3+qlWrMHnyZFRXV2PSpElYtGiR7CwI4ewmXH5MrPc44w5jPCA6GhMYhJxh4hCafZdqfITEKIzR7NoG+71SD41JfteHjCUPxqUFqqDoH553KY5keBeFYR1L/fbTmPgZDTLnxRYne0zOJwNvt7Zg1/hmr7GHNwjhxSYNjr8F4mBKRzScT0DS/bC9KfNCq3+qG7h6IbWIDxw4gAkTJsAwDDz99NNYvXo1vv71r+fuJ5NJnHXWWTj22GMxf/58TJ06FVOmTEFTU5PMbIjhYWMC2Bs6qe8O2zEN66yR9jwNlhl19s1oMYZd/Wkz6fx9eTmgReU1iHlpTKI48Mur86eelRNxn8Vm/Gp/KLtTjlnIdoQnnfpMrcOimglHpKyTA6/DCWWo1227CjNxxLEDj95nyM8L9fUCJEU+U4Z1guD/jIxhw25jQpuUUMLa4lFHkJEqmDz11FM46qij8Mgjj+CEE07AwIED0bt379z9WbNmobGxEffddx+GDx+O2267DbW1tXjuuedkZkMIr9OFDQTryMP43jyzQc/nbDN5QyyzEt9PxAV0FM3JKw9exq9ejZ3UKRkeaiuq0OT4m9Y5hb+UE2781nRYOnSe/ATJu5+DqyDxiQ7gpDhI78giiPs9y5oP0TjCxC87pPySBN54Ide/QnYFIVUwefbZZzF+/Hh88YtfxODBg3HBBRdg48aNufuLFy/GuHHjUF6eNbwxMGnSJCxYsIAaZ1tbG5qbm23/hYGn51cjXAnfutbt92wWWZWONLNizUPuesA88NulBAsfFKew0ZVl541kAcF7Nm5N1q2Sd/62EuR00Vxakr6Hl8BHPJWYoY3wlD2b8EN3LOCVVFrDSh60w6rPon1GLl8i1k+cQrYonu1B8uKpTC2o7L7Api1l2i7PVl+jRqpgsmnTJjz99NO45pprMGPGDLS3t+MrX/kKUhnXc/X19ejZs6ctTG1tLbZv306N8+6770Z1dXXuv0GD2A6T48X3dOEQv9ofvjUOo/pX4U/fPp45DGnnp922gFXdaJW246+apBz4C0zy8s2i6nc+c/KRvann2IikT9+yTAnDKqQorjGxhq8oTWDCEbSzgQzc+eVjcPSAKjzw9bHU+PhsTNzPMnu1FSxj2mTDellUUEwQKmw8SznRpSlTcLJE6oJUjqSvFOrON1t+rL/V6s9FkSqYbNu2DXfccQcuuugiHHfccXjwwQexcOFCbNiwQTjOW2+9FU1NTbn/Nm/eLC/DFpyzI7vnV7o3ziBkG9LIuirM+uGpOGs0+152keO6/Z6jrSLEXb0F+o5I81CSMPD0VRMiyAUZlz8MS08VhzEcuQ7xpf3UVSfmNCakuj6otiteueFUXHDcYa57WUg7HahCX4CiIRma+sXp5ZXWeu/qk48QzJMlXsK1/D12IdiaZWahzTHCFJpBZhAbExZEbUyswWS5slBJjpEqmNTU1OCww/IdRfb3rl27AAB1dXXYu3evLUxDQwP69+9PjbOiogJVVVW2/8LA2dC8duXEgTN9WVv/aJ2qlbzxK61TD7d0/OKXOTOgpuVjVOar1bH9pj9sGGzqb2+39nloxs0qdUIkPLce08rH8befyt2vXjEt5Tjyw3UopuvvrCCWvyZ6DhNJeyraTmUvhXhdD5KOCstGcUBr1yx1UbFXySFVMBk9ejRmz56d+3vNmjUAgCFD0p4Qx48fj0WLFqG9vT33zNy5czF27FiZ2RDC93ThEGpjsFmanLjtlTqeaup3OrGvxiTibIc9i+LFy+bGLhD5E2SXQOClHM7rvvFxCJDBvh+t/vpoNSmGodarJYJ7U0n9QxxnvKi004OESP5UPisniPGrStosqZ5fb7rpJlx22WUYM2YMjjrqKNx00004++yzUVeXdhc9depU9O3bF9OmTcMNN9yAZ599Fjt27MAll1wiMxtCeHt+9e8cwz6V0bUe7efHhLGSOXdwsNor2K4zpcQfL2sCUjUmDNdFkjNo0oIrHbYv5xUdbZ05dM1WbsYftgaNdt0x0PsJBpTfvHlJCLQ7UprZv63fTPQYJpJRo1+fQQtPepa1v6M5qpR/jozH4ZdSU5Lb38gYNuyHdlp/MwVWEqkak/PPPx/33nsvpk2bhgkTJqCqqgpPPvlk7n5paSlee+01LFu2DOPHj8fMmTPx+uuvo7aW/QyH0DCdSznW3/aDumT5LAlSJ/yWcoQ0JgHyIwuiNiKGfDhRYeIncnYLfQAgXw9LwGYpP5pK2qURYi0HH+2b39IWa1Gw5ps1HtGlISukJTzRmX5ek8MfgUqzcBIi2lgVtEA0xZzIBggVkX5Wzne+8x185zvfod4fNmwY3nnnHdnJBsbl+dX5t3W2QAwfssrEge9SDmM8Tmk7FMv2gPjamETgiTHS3QXcA5pr5CbGxRJvoO3ChKUInrRlw5NkMDsKsbDuMjFc8YnamJB82QTxSisKrWpGWR1kD9AkLVbYGnMvrG9HO46CKR6F5BjFnOvGh5c30cBLFRKMRpm8WvoYaJLgOUtFoXprQ6bQwDuzZ46X8psnblbtFk2dG0bHE5YfBHt52WNmVtn7LEf42TaxaEYNGNR1fb/v7D5d2J0XceNX97WgBvNiS5j+z0jxfgrBfkCgz5O6lCPF86t9ckm6Tg2raK+uBZMMfp2Q/6Ad7Qf2r3Rs+WHxMumfEuuw64+qxq8qzSb8oA3qfgOxCF6H0fEi3e4g4LPsSzn85Ur1+uuIQ8qunMzbxWL8Sp2URZmHCOOLQXVia+9BNCZSciMHLZhkcB/iZ//tJ3iIqMCDzFaIPgkEZseu9yTNHH3itF+X3zBd6mCXkaPEtBiEs7AdJ7Hlgfw7/bf4YBBsV044miuPlSpqGGpYASHCC3f85LSYwub+zd8QdX9OWsrh2sosMEFgiSdMgaSQJg9ZZNdBXgdrqpaZFkwyuLcL22ccqn1Av2OyWbMbxFgvKvyEwig8HAY1EiYNWLJEONqSgPs5+bAv5URfudITCvZnXTDvPPHXOrKklxMgLL2yXzunxs+ZJlOcAu2MfoikZO2YR3Se94Rs6gQTCwnWCQtXRDGjBZMMXhoTwP+bicw0g9Rh/105rB2kYfsdvG4Ga+hC6UtsUHStUDStlqa14skDi01TOEKKzLjpeeX5FF5Cqyy9G20w4B8XDNu/QBCNCekal45WKF3/WBQa/RRAto0JbetwoaEFkwzOtXLD8UfcW69YlnJsz7PGyxEnW6zRr7FG3QDFjF9lCwUeSxIBBsoYNxdwQBG8CKKGyJJmkNzwKDhoyxwybExIRpDBD/HLI7KVOky89hP6eVrmTosQRpYLCRFo9Y/l3VQVXbRgQsF+3oj9g5PqoEi1DCLsEDsZgfVzGUesSxXahAb9aAl3aY//Kzifp45lIRdUYNfnNIFKMN9pDaBDWLGpFYk/c7DajdmXW9jbIK2cbLt8pBi/uuMVizNYPooFTwEvDgFFQn1JR6POt9KCSYY4XNLzYU+f5+RU1ue8lhHY45RfTn4DRNQ2Jirg/Z38MyurPjNr5mTKrtSlLtJF1jjFhSnD8bco+bD5SEqFNSbueIneXCPeNROL8atXWxFJRyAMDRn+r2i77VgEDdX6tSxaMMngVUFU/HYkp2L2eRtbrknW+7zYg4W7O4n0fBSNy9n4ufPMqAEweNYfKPEFUpgouZYjKDQQQlK3TxPCM09+KZoXHpf4QL4t0nZZ8EDShIp7fnVrwuJ0KEYkwk5atcFcRn1xxhM3WjDJ4OVgLShhfHCi8StFTe2FU8KOW50Xe/oMyadlh+D5DCLc2K+zadPC0PqRxidRxQWrHQ6PliaIjQn7eTBWoZUtQZL8mf3bflaOuCbHSZCTj2URbuuOpu+IX3tux5qbsB0qRoUWTDJ4+zFxfmG+6YIcy2v737KWL3icblFn4gbLU+ER1lIOVcshKTlatWAbxD3u0QQYhvBRH63AgnsApwhexGv2q9LtWBwpsMoRJilvmb+tV6Uc4kcQeCyJFj3Bl6cdYcSzEgpBNCbyjfLloAWTDF42JiwfLGqrbKKDNYFKJkMNGFQuCDpAyLW9ZR/0+OK1/PbqKD3jCJa3MOQ3YpQS0pGjkWI3UiaVrdAhfhyCPi0e2W3SIFzjikssWKSEpuEpALWDvc6pn18WpB/iV6g4Z4qqfV9ndnwdrAm8gEFKiCHOQlh+kZlG/Atejm/BqE1jGTRVOV3Ydt3nb68HmZeERAdtQ9xOi2YbZI2vVMIJlTmNCceykOw2VWoAfbqVoMTsQGtrKwDgsB4lAIDeXYzcNT+yYZzUVgKpjjbi/WRbK1rRSYyjW4lpS9sVvrPdda1racp1rVtFCVpbW9Gr0sjd83qn7DOVic7cc326JtDuE5ZUZlXlZu5610Rn7rfRmfQt1x5l+bDJdnv5sX4TK2VlZSgpIX8jHrRgksHT8ytDI41aAe5nY8I8i6aEj5LAGpeIxQQe24V8IOtPemDDoM/yg9hL8IRXARlZNRDNDFIkBYMUjhCRqFxCdrBGzkfY1HZJ4Ccn16Jn11L0TDVi/fp9AIDbz+gLACgvMbB+/XqmuLJhnFSUJtDasIN4f8fWzbb+0vpMVWXSlrYzfPnBPa5rPSo7MdpxLWEA69evx+Wf64r2ji4A4PlO2Tiru7Tlnvve+B5Idnb3DEsqszMOA07snb5e1SWJYZlnurbtwfr1jdQ8AMCZA4EJfdLP79m+xfaurN/ESU1NDerq6gK1PS2YUPDadsU7q5TRN7ptTOSnKcfzazBE0pd5OBl91h53ydAhORbL/Q4522SzBcHlB2oajvfj0Up43bPtXHHDvDxriUeGHwnr+wkbvxIWo/mMX8WXpKyYpolLjumBQb26o2tNbxzWsyu6V5YBANq7NAMAKkpLcHjvbkzxZcM46VJegroelTD3tLjuHd63h60crXHUdqtAnx4V1PgH1XaF0XDAdq22WzkaWtpt1xIJA0f07YHEnha0JtPamSPqqnzfo3f3CvTqnkl/VwvaO73DksqsS9NBNB1MAgB6da9A5f42AMDAnl3QraKMmgcA6NJ4EE2t6bBD+nRHx679uXte+SdhmiYOHDiA+vp6AED//v25wlvRgkkGT8+vgeOWGFkGX5f0Am8gx/hVPu4dUxFnwJkcsuUbwoGFoH8791CT+c26lEPYQupEFdNXMaNEggBjOP6mpue+yVIW6aUcax7Y0nM9jHw8tl05MmxtDMb8cMBqJN3R0YFj+1WiS1VPGGUVKK+oRGVGMDFK00sFibISVFZWMsWXDeOkpKwUFZWVMEqTrnuVlZU2wcQaR1l5hS1tZ/wVFZUwSjts18rKK2C02dNIJIx0OmVJGGZnLl2/97CmnyhLwjC8w2bDlVjKrPRgCkYy/X7l5RUwSs1c3rNlTaO0PAWjw8ilaZTmBS7Wb2KlS5e0tqi+vh59+/YVXtbRxq8ZvLYLq6gC97cx4Y8zrtf0M97y6wKlakxYnjF8jBeI8UZXn1htNaJMP4jGySWHMsZlwGA+KydI2Yh+W7cg5daYiGpgSMISefk33FrR2dmJkkQCRkm4c+DopybqoFZugK5duwIAkkm3kMiKFkwy+B3iFwQpSzmO6kdcL6bM3FhJGIZnRxX3gEcjjvTDStPLfoW61dX1nKwhN1q8lk9pz/ldd5aTdQLitxuMRdPp3PkTZIeEkfs3uMaElDbXUg7jt9AohgKfSoawqwWTDF7Gr2wRyMsLC76djIjGRIFKLYJMPyZM7tylpSYHEaNY+q6ccCpykE8kvM2VQ7EVZPAVdWrl2pWTW8rJXxO1MbHHa7ji1aiIaNszCL/cfxUSWjDJ4LVdWIUBm8WOgOZumzkN0e45YAEFLevItwt7aDVYwvs9F6Y2JgoUaC4Ast/JaynHbwmGbaCgLfv6lQN1iUq2YJL918cujeV6DlWMkYKiSmUNgkH9o2DRxq8Z/A7x8w0vLSdsEPsrgQGeRyhQQUAjEcWW0MAaNZZIfaAPgGx5UV0lTz2MjLUuE+Jj15iI4dJ6BCnjnFxiWcqR4JKepIk5lBB57WnXXo6d27ehsiyB1mQKALB962a8uXBlLsKPF8zDj669Al+59HL84Ee32sInk0lcf/31+Mc//oGuXbviuuuuwy233GJ75q3/vIL/++3/w7Ytm3H66afjJ3c9gC49qnP3d+zYgauvvhqzZ8/G0KFDcffdd6P/0RNy908++WR0dnaivTOFjs5MX5LqwF9efhsA8IeHfoenn3wC3brldzzt3r0bTzzxBE499VTs3r0bJ3xuDPrUDQAAdCkrwf6DbRj1uTH43189AAD46le/ii1bttjyvXHjRmzfvl2gVNnRgkkGT5f0jqqtwmTB93RhgTiFVeZiwYTjcg9AUacvoo2y/Pb7diFqY/zgrdtE+Zhk68EZr2eaAZZL7Dcpvzmh2v74CvqOBzKFbxUgrAf78cixpDoal2dnlaG9WltbK/7yr9cxrE93rMtsof3BFV9P3zRN/P2px/DH+/8f+vUfQAz/0L2/xOw3XsPLL7+MxsZGfO1rX0NdXR0uu+wyAMCalZ/iv79/Ff7fb36Ls6dMxk9+8hPc+N1v45FnZ+TiuOCCCzBw4EDMnTsX77zzDi644AI8/9psDD5iKACgZ8+eePnll7Gt8SB2Z7YI/+iab+bCJ5MdePDBB3H66afnrt17773o7Mw7mztl8hn4+T2/BwCM7l+F2cvX4747f56739rairlz59re7bzzzqMVpzT0Uk4W53Zhj105cZys6WxAvtuFBXoTHhfetnAxd1xRL+VAYCmHOR0vo8/Acfuj3KmxENdCpL+RtR2zLetkYXZjQl3j98ob/a2syWaFFN4SIGtMCH0GJeKCdG0eUZZN08SKT5bi0WdfwlEjRmcu5u93dHTgpb/9FXfccQfGjx+PKVOm4MYbb8Qf/vCH3DMv/e2vOOGkU3Hpt6/AqFGj8Pvf/x5zP3gPG9atAQAsXboU8+bNw4MPPoiRI0fiuuuuw6RJk/Di354O78UU+uRaY5IhzF05YWD4iJTss+j8g75O2xhqbhjblP0MMmUuUbDkP0w7EFaYT+I1aH9EC5NRsUCd9bvuVaf90mPyY+KRB7966Uo/83fKUt+zwkTCMGzXeSA5bosL0zRxoD3tFyTriMwEctf8yIZxUpIwcKC9g3j/QHsHEgkDXcpK5OwYSSRw269/S71fv2Mb9u7ZjQkT8ssukyZNwp133olUKoVEIoGVy5di/IRJufuDBg1C3YDDsHzpYhw+7CgsXrwYgwcPtjkpmzRpEt5494PA+S8EtGCSwavNK9CeGTt2/pmbM3xQwSLojFskfQnHiYQO87cxPL41LSBjobHIKDIUJjIERa8dzzyxsxqjyhq0A9lxZArf2oasSznC+chqXRRYqj3Y0Ykx01+XGCM7n07/ArqWhz/kNezeDSC91JKltrYWyWQSDQ0N6N27Nxr27EZVdY0tXHVNT+zeuRNA2kGZNXw2jl07d4SWbxXGuSwF0KVHg3NXDu96bNSnC4eB7xsrUnNdLsqlakz8BQiDkIfIUWTJLfZysODefutt/upnYsLkx8QlNNGXgN3pkx+w+VpJeD9LzxdpqZd9KUcjhkqjQCF/Wq0xyeDshHp2zbvydTbyIb26usJPHt4HG+ZsJMYdRgUpL3HLlEG19qKd1KRhvQPFcfKRvbFkSxMqyxIglZZfYw/SuQ7t0w2f7XKfr+GdnoGzRvXFSx9vwxGEMz4mHFGLeesb0KWM3x2z56yectcrzIDqSqbnspw8rBeWbG4EkK7TIsgY7LyWqljjn3BELdbs3MeWHiHSIb26YmRdD6zc4R1HjaWvqCgjz/WcxqtnjOjrerFs2K4V+XpTUZq+NvXofnh5qdhOiGwyMrYeZxEdgLuUleDT6V8AAHyytQkAUFFWgqP6dmcKnw3jpFtFKQ6rqcTqnftd90b3r8ot5fhRXpJAe2cq93dZibvMygh9r5XefdMH4e3duxc1NTUAgIaGBpSVlaG2tjb9TJ++aG5qRKUlT02Ne9G7Xz8AQF1dHfbu3WuLt6GhAX361fm+QxYRTXK2jKp8XNmHjRZMMjgbWm23Cvzp28ejsqwk16Bf+N4kbNl7EMccVu0K/5NzRuHd1buwYU/6wKfe3cuxe3+76zkZ3HvxGFuFJkPuhP581Ym4/PGPyCF8ZpgkfnHBMfjq+IG5v0mzzFvPGYnSkgRqu5UhlQKmPb/Edv+GKUehf00XnD68D+r3tbkj8ME6qDx/3UlYuWMffv7SJ0xhn/vORJx415vcaf7iwmMxfkhPfOHofEcx4/snY/3uFpx9TB2eX7gFp1sGdlFfLccP6YkFG/d6PkOK7/nrTsKufW0OT6f+9g83TDkqvW2wrQPfO/1I9owqxthBNfjOqUPxl7n5yQJJo0K6V1VZiju+fDSOOawaT189ATOXbMNbK+vxwdrdxLS+PHYAWto6MLRPN1u7tCZ34XGH4cTDazGwZ1es370fF44biM5U/uOcNapfLmxVZRmeuOIElCQMVJSmr9190bFcgol9kpL+qyRh4C9XT8AHa3fj4XfXeYf3Uydx0N0iaCUMI7eckn3fyrIS5iWWMQNrsL+tA1sbD9qud8nEQeoXu1aU2jTgQ3t3w2e7yZORYX27o/lgEl3LSjGkV1eUl9rjG9KrGwiySg4DQO++dejdtx/mzZuHI444AgAwd+5cjBkzBomMtHDyhBOwZOli9KhMv/eWLVuwY9tWDB91DABg/Pjx2LRpE7Zv356zM5k7dy5GjD6GmKaVoX26ozOVQqmAZDK4tiu6lJdgYM8u3GFlogWTDKQB9azR/Wx/jxvcE+MG93Q/iPTplt+aOAS/eGUFAODbJx2O+15fLT2fAHDa8N7E636D3xePrUPv7uX2MBzpkp791sQhvuHOOaY/Blu0TE7BpLKsBJdl4iEKJj7TM+tE8LCaLjjh8FpmwaRvVSVOPao33l9DHnRIGEjP0C476XDb9TGDajBmUA0A5N6HF6edz7cnHU4UTPy+2wmHp2dm/16WH8xYvnVlWQmun3IUw5N0hG0ZGI1aWTRHl04YjPJS9o7ZGvbXXx2Ds49JC5x9elTgqlOOwJF9u1MEk/RAe82pQz3jTxgGvnHiYADAKUel229za/4skckj7NqpM0b2tf3dwzKDPaJ3N6ynDKykF7K+2ylH9UZFWcJXMJEJz3fwo6KsBBVlJS7BRFZ+ykoS6NW9AqUlBqq7OPtKA9VdyrC/1fsMmNLSUnz10itw++23Y/jw4WhqasIDDzyAu+66K/fMtd/9DsaOHYsnn3wSJ510Em699VYcd8IEHDUyvctn9OjRmDx5Mm644Qb84he/wLvvvov33nsPz916pztBR3PoXiE6rBsoLUmgsqwEpT5aobDRgkkGl+fXgPHJXr5h3S0SNP2ganiiDwuOOMPY1SOboHnk0UqxLM+p7jhNhOD10N/Ggla2QeswKQFScNs1yTZq7LY1NGFQanYKklNOOQUA0JLZMbRu9UrmsN/94S2oSLXi3HPPRUVFBX74wx/immuuyd0fMWIEnn/+efz0pz/FTTfdhFNOOQW/f/yvtjief/55XHXVVZgwYQIGDx6Mf/zjHxgyfGTu/vbt23HKKaegvTOFZGb56UCzfanr+uuvR3V1XsO/ZcsWPPnkk7m/337jVay96GwAQNfyUnQkkxg1ahSxHLIsX76cuRxE0YJJFpWslnxg27ZLm1WK9zhxGTr6ny7MbnCoOgbYDChZT7/mGXxVhdXGJNg70W1a0tfUGcBZDO1lfmuyj5cC6jAFePnll3O/l25pBGBtc/nyuPP+P8BKtlRKSkrwwAMP4IEHHqCmcd5559mcla3a0Yy2jrx9S58+fTBz5kxbmGxeAGDhwoUAgO1NB7Ero2keUJ1fgvnRj36EH/3oR9T0e/fujY9XbUTDgbTJwdEDql12SNZyiBK9KyeD7GYWR4cl4uhJtck2KTu+fkxsM9PwXyguDUVwLV5U+SZoK1g0fozPy3oL2uBN1LYIacm8hccwBX0vrUghCaVKonL5qZw3DrRgksE5+IntajGIv2XAsw3R6xnX9QKY+PjvyolWYxJ0x1P2N+29eAUtrydoRoyyyok1mmCaOoEwjn9Zn+cJExRbOhwvydu3eAp5RbI8qMq2dTVyUfhowSRDMWgmw9YcqNro4hhUwsK9c4Ty2yMMNW7hXPEhbvxq+e2VW+otzgHbJuz7aDcEUuRqj7JtTDyTkyfYFAKe30hyfHEMIwX+eYhowSSDHI+X0cCSDrPGxDUQktaTmbLFnRfys/7ps9ocFAPBX63w7W+EDk2U/a4hlF2Y30NoWdcaviDrSkFmWkNACyYZXINfUIOxImwjcb2Tc8eUE9vAJTGP9O2rQrERfpGesg/DtFm3n00ELW7SbxXxtjGR812CaqDSz9If9ovGXm/ZE+U1fnVPPpiTKlLECkDdYpOTM5XeTwsmGfwGP5UIciCaErNPr7QEwlj9CBWf8au8tKL6jqRkeI1fecMGxW/ZJZSlUWuU0rcLW38Hy7tKA1aceH2hwhk9CgMtmGSQ0S9EvTvEnT7/jNjLt4Msghqm+X0bXsPgOGDdvmkYHnYlAu9WLFuEbfdYhBxe7YmP1i2oMXzkhGwQXgw2eUWDYu1axlZyLZhQCDzLCHFAkGpjwpWuGi3Ay04mihxGuaOFbnTJP/BEJcCFXd/pZcIZL00A5ImDM02mzMiIjvFe2MJTSUkJTBMwOztCTScKWMs0atTolfMcOJA+lqWsTPy8He1gLYMMKS/uCiK6Tm6LgxAusPFryOlHXe6y0iO9lgGnAMGwbOeRo7DLRua4JnOQlO1IMBxNomg4vqVckWRkvW9paSkOpkpR2rwXXWtK0N5WglZ0AgDMjrRjr06UoLW1lSvebNgsnckUWlsN13UAaG1ttZVZe0cq91yy3YBf0tlnU4aB1tZWtLd3uNPP3OtMtsPs6Myly0Mq2Q4z48GVFpZUZsn2tvz7tCXQWsreYXe0t8HsSObSTAQ46NE0TRw4cAD19fWoqalBSQn/IaZZtGCSQbqDNcnx2eIOoA1xzT65DP3Yn5WJv4M1voE8DkQXzGg2jEGXdaImiDaDZecY7bq3cSpZg0S2kaGlSY0+tD6AdxLlOmuIoSJYUwjSpgzDQFOiOw7s3oaeB1th7qtAReagvfq96fNuykoMYF+lVzQusmGzVJYl0Nq1HPVN7gG9/KD9QLrOlJl7rq1LKZp9TtLNpmUYQNmBLmjvSLnO9Epk7tXva0V7h0lM148dTa3oSHmHzealvMSAmSmz5tYkmg+mNVLtXcvQyHFWzt6WdrS0pwWpsgOVUvrPmpoa1NWxn4JMQgsmGVxtPeD3iXt8VGXZJWqiWcoJcx1EwD7C02aFMqDyJcGFaN0Lu814GbjHYacUZhtlfR/RHPCIRqZRgp++uRu9u5bgvq+NwcghPQEA17zwDoD0oYR/unyURwxusmGznHhELW7+/BG49qU5rmffuHmyrR3U72vFtS/NBQBcfeoR+OYo7wM3s2mVlyQw68bTsGJ7M27/1yLbM13KSvDyDafi139ZiNU79wEA3px2Otc73fbYvNzhhLSw2bwc1a87Hv5WusyenrMBT364DQBw/ZlH4YKRhzGn+fx/VuLV5fUAgH/fcGpOaBSlrKwskKYkixZMMsjYlRPVbJ1+uqp/Z+SXxdB3H/g9S0jf1/OrYFqiRCnyGQwvx5qfcOonW5z8SVvqsoC+iddA1ndXTggaqrjsfILYNonSYQI7WjqBkjJUVqZn+lv3pWfqPbqZuWusZMNmaWwDysorXNcBoEsXu/ahrM3MPdeaKvFNO/tsRWk6n4nSVlc63cqByspK7GnNx837TvUHUr5hs/d7VuXLrDVVkruehP/7WNmXNPJpdqlERWlwoUIG2vg1g2wr87g1FsyDFcszBl+cURP3bigWRN3m07d9M4YXCBOUuLSFQZL1M1anxa1sfaP8DhqXUPgoJguGIWYELvB2cWvDnaiWHxlowSSDjJWcyLZmMmhD6Ol7Zywc41cOmwqm9KNviVGdx+PWDlg7UUoY1g45lPopT6KnKYeceQ1jV1RQT6nk+H3ammi8vMavHuUX+aBWwINofoKm1ksEswGy/FbovbRgkkH1ffn8S02EJZGg78iiHg+YBAmud5eYAWtUVoPDSA1s6VN1y0/G5ZTguREmih03cSyNBNp+LxiYzfNrHLqywkCmb6AsygwfnC+k6rinBZMcin4hAizqfdaOVPZbx32IlapqTdZhwjAc2hnHPe50bZ1wNDYmMlKJYlilasGICYoUPn+QKOCdGQfVokbjjVnZ4g4dVfu8IGjBJIP7rByBtceA4WVCSp1l7TyUoStgpL5+TCgDuUzi+p5Bjh9wPefxlxKIvQglKs7B1/Zbftnw2K3ITs/bEDbaeqDScgEQfMleBWSVqUrvpQWTDKqqtHhgmR0HaYgsDSCcpRxHGs418xDSlA2r5sI586Ov5DAu38RgTyBbiBM5pJDteWsa5N9e13zj9wkT3bbkeNKNMj2DQ2USNDvKCVe2Zd3iQAsmGaQc4hfBzN077uDph9GJ8ETJojb2EiLD0mzI8AwsglzjNMrSRZAYJQ4GrBpHpq3ADOnRQhC1jdzxMaQY4ojN6z3YFd7Wl8nLp0qzclG83iGObkJWkar0abRgkkH6dmGVvnIG03R3UjK2roYPu096BYudC+e2RxZDTxHvpoWEyK4jGtYJCNWPCSEilTy/shB8+TSc3VZhwixABdQiqtaOVMuPDLRgkkGy49dQYekkExJrq2rLXJ6DQUgfLujslrQdlbdcWYyelYUzk16Pi76vp6bN+rsgCtQbluVAoDjeNU10L+J5NlUM5Slr8hG3XaQVLZhIhNYZxPHBxQexeNdyiJ5ffRUm4aid48L6BgHO1HJhjUvFUmKts7IMgmlnLMlayomzo08YwQYrW95Jy6scS98q20DIdrAW1SSuGDShXmjBJIP8pZx8bZFtn0Crh0KdJ0coVet/MTVMV12hdOrMM3ypNipsyPgekRto+qRN336vZuXzWg5UNMuBYbd3EiuAbDhSaBldfNyKaZWqhRZMMjhnAIW+9kjrXOPYKRDY8ytPWgp9Ays8u2OCbHVlzUPUBBGKRHZh5QYRIfsUOQXFE0tcnyYiUTX/K6RKKBptoffzgFPbp1jmBNGCSZYQjV9lNEarRC4anahUH3dDVGFHTFS4bZ0CquStvyXXSXqawWakQeIIi7DzE2YNdwt2apWtLAr9rXjybzPilp+V2AlVMLnhhhtgGAY2bNiQu7Zq1SpMnjwZ1dXVmDRpEhYtWkSPIEJkdwxxVxa6HxN+tW5WLohLba3a6cJBkbETimYfETXRaGvY6mwgwz8fAVDEZitWDZXExINGFYkfE55nA+eHHkGQuEXHIB5tLGs8cROaYDJjxgzMnj3bdi2ZTOKss87Csccei/nz52Pq1KmYMmUKmpqawsoGM85ZuZBRVGSKUQbjP+G45RN0IPYwu3CFKfTZYHpLd/5vu9BFETY9XrlQ1bxRD4ZxG2iGmaZLYyJhICtU7asMlDN+jSbJSAlFMNmyZQuuvfZaPPTQQ7brs2bNQmNjI+677z4MHz4ct912G2pra/Hcc8+FkQ0upNenmFtgKLNKRVtAIQ24vIgII/TIiD+lI3u9n3UpQp5r7mA2Ubl7HPkpNo2tlajywu4hOGA6AcPLRpZ2TCVDbumCSWdnJy699FLccsstmDhxou3e4sWLMW7cOJSXlwNIF8SkSZOwYMECanxtbW1obm62/RcGMiTdqL4r01ZI0XX+EF6CzwjQ/TSPjYlCbcsGq1bHhMm9NOW5nMD4XCEhWiZetchPY6JqvaIhc1eOzFcPqxgjWS4ysv8S+qgY99TEre0LA+mCyS9+8QvU1NTg5ptvdt2rr69Hz549bddqa2uxfft2anx33303qqurc/8NGjRIdpYB+J/HwkvcFYQ1/18/IV2eU0f3CzE34RJFw4zrezKlyzpTDEPoJNljkJ5jiYvzukyoJw0HipPjWTlJ4rjBNUgYwOThfRjzEX7p+tU7WcsfkWlmFIs37rEmDEplRvbee+/hqaeewvz586V1grfeeqtNyGlubg5FOLnj/KPx+dH9cMOzi4Xj4J3phgnrrG9gz65YeefZqCj1l1HjeiUeoTG0s3JCiZWSEMMgGXAlR1r9VMkrcBDbCbtmyR047OUjWfzzuklo70yhpa2D+oxqeY6awF6cQyo+4aYU92ATAlIFk8cffxyfffYZevXqZbt+xBFH4PLLL8ewYcPwySef2O41NDSgf//+1DgrKipQUVEhM5tEaruV47CaLqGnExkUI1JSHa4sK/EKFjwrQdfs/Ty/FoAq0zYYcGUymJAiy2I/amRtbRbxY8KzK0c1EgkDlYkST8GEF5V2+FDjhRHZN1JNsFNpQiwLqUs506dPx+LFi3P/vfLKKwCAV155BdOnT8f48eOxaNEitLe358LMnTsXY8eOlZkNYWQOcGFW3jBtTIKmGwb+M4kI1NEhxElalzbB1tGICBzRGSGGGy7s7cJc4RQdCLyWpqIWVlUrosB9u2IvpFp+ZCBVYzJ48GAMHjw493dNTQ0AYPTo0Rg8eDAGDBiAvn37Ytq0abjhhhvw7LPPYseOHbjkkktkZiM2VJqdhj04cMUZ8Fk/41eVyp0Gq9DrfdAc/8vZ/XMYxOtBCCpM0J+35lUEvlBhaExi9WMSc3iemGWUk6rtPgpU0+DIIFLPr6WlpXjttdewbNkyjB8/HjNnzsTrr7+O2traKLNBpVA+bzD33uG+ZRwdhN0rrkS1c0w1gldzx5rP6DQm7DYaQvGHoQ30ib+gPb8K5N2an7A1DPKMX6Op4Sy+lqKkmPw4ZZGqMXFy+OGHu2a7w4YNwzvvvBNmsnIQmSFZZ6cSsyJCIhQJwT/OMBqor+fXuAtbIu4zm2gqeX/bE797qkFrP15LEdTwlGdkOwZTtXit+XXVKcpvHuI6JkIGgXdcKtao1MqNHPRZORYKwciLNW7aI35BQ1nK4YiTZTbi8ssgkKeoIRlzsuz0kPpuISx5FcsMLe6ykV2KQb+LzPxEsdRqGIisIyAlE+uyXYC0VRUvtWBSpMQlYETRQON0ZiQTovGrUwhjMPT0KnK/JYowEE6FQRPiFT/ZpwrrMpe3toUaSwHIZYEdrBXAO/Igfshk5l8FyoO6fKNA3mSgBRMKQpU3orW+IHYHfo0qnPV7njjdz/oJIip0FGHBoj0JywBVJlEPhqTgXssPYazTx1ovmetE+JlUaYlbBipoCU1JRkDxvwkZLZhYCEttHhWqrX2GhQodAy+snbPDv5rUwS2yUpOckNvGJAzhmZ5e8VF8LxilHxMSsRq/xpd0aGjBRCJKVRBGtbiEKEPHr9EXoqAiAm35xvP9I1jfl0XQZSe7cMEXXlTY8cpnrAoTqQJtCOqrOAls/ConG7IIvrVePbRgYqFQZqcsnajwu4SR8aDGrwJhVINVC2Ka/If4MavtGXfyqE4cVbTQrJo87Y5iXdILy/o1ukFZtaYTJD+q1mstmFAo9C1lQe0RyGFjeidfjUn4xPXq9iUgq2Ahx6gzDMh+QDjj8FIC0bSBgeq2/HBx9wFZPPMYRfoRpMFD4M+iwAvRJjqq1LmgaMHEQuAtdhFVCqZJtLBqWj5Bi8Xt2yNYfEJ5iGhq4bQxYYH18bi3gvvHJWawTQzD/XxxdOhZrGXp3m7PEoH3bdHmUMil7LfNPy6KRBaxoQWTkIijrlh3HVA1JtFkRRil8hfS0p5nx+axXZiuKfCwc7Dd4te4iECMmtfmwzP+MCQs79sigmmsNiZBI7B5Uw4Wld/3krH932BIhxhOKAx3kFBRTVCSgRZMLPC6AneFp8Ulud7E5U8krurva/waxZbHCF+eZflFqH4q3n/RhWlmnVD+l2H/NywUL1IA7jLwOuDvUMD6yiIebElFZub+jd5qI+i4pSJaMClSqJ25T80Neyum77OE9FU10AoDt/tw/9Lz1C4wPicTKelE3MOqvswVedohaJAAcr6k+Y2REgtDOoeiNBcxWjAJiXBd0jMMVkXW0RY6XBo0puUbjvi8kwgEs3O3KNIIYvzqc582E1Z1kFJJvR+JgS3Hdwj6zdQp2TSq1sEgaMGEQtC1xzg6BiaBxSdf4Ri/BovVT91aTO1SyFCRkTDKSaZRsFxDWvc1r6yGoinkGiylJ09PK6Z002lHbNtUwOmwEuf3DAstmGiUwmv9NvdMQTY+w/WLZVAPak9kd74UTcHJ+D5Rb3OOu0rJ3vWlUhvxy4ss41ehcCITUE+nenFMSCNPMnS0YGIhuPW5vLiCEoqvh5i670PJ86tpOjtZ8rvR/Jt4EUb9jLueW7Hb0/BlzHfwpNRBhV6fGe7t6IX4kh4Efh2PCGIxfi3IWuiNFkwoqNYYRazH3XH4PxP3bh4hewnFvpVMpArLwaJiT5PkYI1T8xP1smjcnbsKDvyiSCNU27s4NYIxWugnFJoQy0ILJhbi7pxkQj1dOEicihaPotmyYSs7zxmXIxxDfOzGoYVQUuIEeb8wPL/yEOVSTjH1c1l4voP1WZ4Jn+H4VzYydzoVOlowkYiIy/CwIG7LY5m1Bmx2orPlsCjGRssDVbCJeHDiXlqx/hbJquGO51AlaBkE94gdMAPKpaNarVItP8HRgokFmWpvVatK2I0q6Bqr0KmyIb1SHN/QOYOT+b3CWaZTSxAVRdTGRFU8DTQZtXdexGFLEQYqCRkytHbFog3TgolEFKrjRVI9yTgbn0qdCw1Ww0zWpRzbMx7vX6idlshR7kHGW9GykeYcTPKnUalJRJEVLju2wFphtVAtPzLQgomFsP0oxI17x4ebwMaWpBl0jE2n0Ga6TtiW3/jjCtcI0TttjRuV62mx94u8qPYOhTAx40ULJhTCGKCjRGZlzaptWaIsFhWvbFjPJ3E7WKMYMRdfX2R7dxEbk0Bb4f2Wcmj1WtHvIKJl4oFLkIqgjKJ0ZhdW3y5s/Gr9rWh95EULJhbiFiaiwK/ihlECYTcWr+il+euQEw1bWhQhhupLwzNz5CWRqGt65OkRCsWr44+75ctfymG0MaE9IzEv9njDK+nQB+WsQXXclQXFKYxY0YJJSMS9ti8zRZ78xyLcRZBkdHogk9tnjYiDtVARTIgeTDzjrDPpQlKHR1EXrWnEvatHGTwKXor3Wo5isn2fIileK1owoSKyO4Q8O1VlecMwgnUSqnYwqubLiqi2gurBV0AYUX3wtS3lCGTV7g2XN6w3Ytqq+GC3O1L0BTgxEF0/EFaRiS/lFMc3tKIFEwsqt1HeOkt6F6aKr3AZxEkYxUL6HqbJP1gw22BQ/wgAIR7ZZRXJWTkFVO+5hS7D+bd/DFI1rhEZXYdOdilHgU5SVltW1ehaCyYhYW2AfXtUYkivrvFlxopAJebR+Ayo6cKfgA/D+nSz/T2o1l6WvbqVS0/TSe8eFaGnAQDVXctsfwcdREIRRiwM6slWr/tVVXLFK20bLutzlnLuUlbiut+9olRKfmjIrsPWalNJeJ+ghNHOCwXVhCu7vYlimRMk3NZWYAQ1KDIcf/3x0nGYt74BFx53GE44vCceenst/r5gS7BMsuaF4QWuPPlwdzhWx0wecW7ZewA7m9vwxoqdzOFI/OO6k/C3+Ztx/ZlH2a5ff+aReGPFTqyt3w8AOGlYL1x72lCMqOshlhADXzymP648eS/GD+kpFN5vSeU3F4/B6p37cNLQXvjnoq35ZxniY85DCJLJ9WceiaaDSZx7bH/i/YvGHYYeFaW4aNxhwmlYc33qUb3pzwWcmd9x/tFoPph0Cb4AcHjvbrj+zCPx4FtrccaIPnh71S5X3kT43SXH4eNNjZg6uo4r3DPfmYDpMz/Fyh37iPcNw8DtXxqNfa0dGOgQHnmXFa319YkrT8Drn+7E1accwZXffFxCwRgi5tAcBsyDakN/sQgjVrRgEhKGAZx9TH+ck+mwh/Tqhl9/dQzmb9iL9btbYs1Xlq+MGyg9/sqyEvzywmPx13kbc4KJKEf27Y57Lh7jut6tohR3XXgsvvbIHADpd7r1i6MCpeVHImHgti8dHVr8XxlP/hZMOygEOmRZQkq3ilLcfdGx1HS+cHQdvnA036CbjoR8+ZsnDuaPi5HLJx3ueX/a1BGYNnUE/jpvY04wCcr5Ywbg/DEDuMKYACYN6427LjoWF/3hQ+pzV5wsJjx4ccaIvjhjRF+uMKL2O6oSliAg7PlVbjaUQC/lWAgsSds6frmoUPlUEszj3vXEC+mE1SBnF9nDemm5xA1CC5noDCELr1QLMMu+GBxfXFXPrzIO8Qtqf6QKWjAJCdkdlqxJhV+uSNkO42C/MMMVCiwdUSF63QyyOyYXjrL0pWpHGiVRF0HQ9OzCceF/QNXqYJAyVVVbpQUTG/Jml4rV3aImrI5ChQ6IzQaALTxJa6MpPLJjibDQp+uBENmiUm4ppwi/oRZMJFIIDT5Io4p8tsM44BYCwupWysMiWonINCaC6VB9hXj8RUs3Ou2Qxo+otnuzO9OTn74MzYN2SZ9HCyYWClFtLhtStkUcxAV1lsVDoZY1C4GX0WIuG1FBuIg/aezwfhLdL7ITy9JIEZapFkwoiHSohWCQGSRXKnUqKuUlTKieXyk2GJ5xUX6rAtu7eoUnaJGKWCiWsaQQRT8VVRGxG78WF6qONUHQgklYFEBdIRq6SuppZexQYvdo6qHeF0w7TISXOiiaK6/o4j6nSfzbq/jligM2u6WQ7ChCiVXNdh4VhTAh5kULJhZkGrzS4uI9oE02UfX3oq8p+1whRY3OmZH6uQp0sBfa5RPiq6rS+YeZC2s/FVRI8QsubcehGp9FGO3HJI8WTCjI3CJX6GQ7YrW2KapvaGyF1e+IOxz5WRGDN3uY8ApNhvGrSBRxVANVhBQuYjASDhue91Cx7gNB/JgUyUe0oAUTCzI/sKpVxa8jJRVBUC0GT7kWZEcfImxqd7F7USAjfRF7Gk0w5Jaz9ySiGL5otoeMQyEex260sNGCiUSslSJRADWEVwiI+pW8OscwveyqBItBaDEidBZQDGvt8Rq/xpe2iogYgRcDxfY+gBZMbIiox6lxKVpb/PIlK9uqCA6qfAYe76V2WyX/N2AdhKP6JmF6alXlexYyMjzzcqUnuIzJlcYhXDNU6WtlogUTqUTb4FUmSuPX0Dy/qvAVmdZyWKNS4H0YKXT/LRp24jRQL9hqYtinL8WGFkwshLSsKoU4N/PkB4loG4D3NtjCh+WT0uukgJakQNeimf2YEMqkgF6TG+EzqIq5UBiwvj9Pt6qUfZNt11SM+QgJLZhQiOvgumBpSogjFOPXQMFZUgg7gcCIzm8kKkxiQXY7KMZOOFYiKE+ZS+TUNA7hehFF+UaNFkwsyFQfq1pBguQreuNXr3uKFrBkqNuFGXeqRG1PIAshz7YxrLUXovFrIdWDMCi2vqPY3gfQgkloFEJVIddn+TkPu+EUQrsU3fIa1quFqdELc/m7kOxkNGmIRwVITyOkiAuAYnx1LZhQENquaAtPjiBMUxEmm4WirMbFC0s9ZP2ihdp5i2RbVSdaKlCMM2xRZJVE5B69qTvfiuPbasHEgsz2WoxtP+pXYj0DpwiLOgetDFjXleNwThaq8Otp/Bo9BS/oRzCeFngJKU/B10ECWjAJiUKoKuRD/KLPx6GAqK1HaN8jou/Mk4x1jJRlr+UUxuI+q0oF4mzi4QnH4b+Vqn2jqvkKghZMJBKmYylZyOzkw0Y1TYBK2NftPTRLRVY0nq8TkfG57UwfxnSK7TvwoPK7F5uYqnJZ86AFk9AozBpSmLk+tFGtM5IhNNo1TIq9oCII78qRaLfEnXZI8R7KqNb+ZaAFEwuB3dBLjCssFM1WIArB0l90acLmDEpgemcb4AtgO7sfKpyHUqhlFxdRCJaH8tbpYhTctWASErKrCouTM940uQ/x44w/KF4DcTE2RhJMxq/RZIUZ2flhXi4pUKeGmsInVrf61gkHZ9igzjPDQgsmFmTaiKhq9+CXL1Xz7UUhZNkuSEh37kG/Zeu0Cmfgpp6qLJyT4kPYJX3UR0tEoKk7lOtFIfR/vGjBRCLFeMqjFbU8v0aXj7Bg2SFCHaAlLjvKJq4TheNYqipEQd6KmvNlDQ/25VpeLbia9VcLJhZkfiJV+yu/bCmabU9UbVyi8NYd1vePo07KXvtXtV3FgXBZxFiGxdZWVaAY24R0wWT37t245pprMGjQINTU1OBrX/sadu/enbu/atUqTJ48GdXV1Zg0aRIWLVokOwtSEGlALGpzUTcKukEXOITZPNU7MGcd8T5xtwgQeglDPKgmUmT4linGwZmVYnx16YLJo48+ilQqhZdeegkvvvgiFi9ejB/96EcAgGQyibPOOgvHHnss5s+fj6lTp2LKlCloamqSnY3Ykd1QZBgpmTCD+TEpyiagNlTNgYjgbP0dpst2CfWEenghozfgqBYpCrFFHMqDeBBYii0O/33FaPxaKjvCn/70p7a/r7jiCjz55JMAgFmzZqGxsRH33XcfysvLcdttt+Hpp5/Gc889h2uvvVZ2Vrg51BpssXh+LbZTiPmXctjiimUpR4aQUpDDf/gUStWOuw4WP8VXqKHbmGzduhWjRo0CACxevBjjxo1DeXk5gPSgMWnSJCxYsIAavq2tDc3Nzbb/okDsEL98oISCLdCAUZADdTFAGlxluUdX7ZuKZsdaHtrGJDyKsQhVEV6D1E9R7UVCjVeXSqiCyc6dO/HCCy/giiuuAADU19ejZ8+etmdqa2uxfft2ahx33303qqurc/8NGjQotPzKrNxxdKCjB1RxPV9XXem6Frd78z49KnK/y0ro1fNQGaCoSxrM7+/vByVMZHwndrfv/g+eNrwPAKCsRE4JFHo9pMnGUp0LKiI0FCuFcBQKL9KXcrK0t7fj4osvxje+8Q1cdNFFwvHceuutuPnmm3N/Nzc3hyqcBCJmleWAmi544+bJqOri/Vk//MmZaO9IoaqyLLS8iOoCupaX4r1bzkBJiYGSmKcCYe3Skr6dlnXgLqABIrgfE/KTnxtYg1k/PBX9CUJ5sJijR9iPCUOFKbSzDothQBb3S1N8hCKYmKaJ66+/HqlUCvfcc0/uel1dHT755BPbsw0NDejfvz81roqKClRUVFDvy0Tm4BHXIHBk3+7Ue1lV4YCaLlFlR4jBvbr6PkNztV5ssLyaiI1JIZUZsx8T21/0kXVUfz7NomeahVSQMXEoFVFUAp3dkD2aNKMklKWc22+/HbNnz8aMGTNQVpaflY8fPx6LFi1Ce3t77trcuXMxduzYMLIRK4VaWWTlu0BfXyMZXQ/CI8zzYULz0FrAFcJLCI1aw2RNrhgnadIFk9///vd49NFH8cwzz8A0TezevRu7d+9GMpnE1KlT0bdvX0ybNg1r1qzB9OnTsWPHDlxyySWysyFE0G9qUH4fikTZTgth1mqvG3Lzq9rry/ge9nVz8fhUK5tDkSi+QTF8ZlHj12Ks49IFk3vvvRc7duzAmDFj0KdPn9x/s2fPRmlpKV577TUsW7YM48ePx8yZM/H666+jtrZWdjYCE3TwKMbKotI7qZQXXng6IDaX9Ky+PazXIyrACL9TIdeJKImznAphElEIFHspSrcx2bBhg+f9YcOG4Z133pGdrByC2pUY/jqTOB3aFJLxIw/F+VbyKdRBQZsEkimUNyzWfkc24sbMweNQDX1WTkhI9/wqQZ4JKhSpNLAplBUmbEsTPHtLqNuF2daV7elGQ1yfxl6uBbatRBMIlfomUcSXcgr/3Z1owYSCyqe3auwUYbvkQuT1Izt9V4p7egkZ0eSIelZd7Keux00xlqkWTCwEtiux/ta9qcZCfFoEy++ohBFd9SNBRjmrelaKhh0GC4KCQwsmIVEk9cOGSu9k2yKnVM78kTEYFIoQLMXzK+v3JTxWaHUjCqKuLsXucyNuirGOa8HEQlCVY6E6sDrUobvlVusj0sQZVgdrhxbhvbg6ZapMRgKhdTZp5Bi/FgdaMAmJYpRi1emQC08IlG05L3bIZDSIpkMdoFgVJrbnwhvuCs1de9xE4sekCHylCBu/Ss6HCmjBxILMD1wIg6UmTdTfyq8D4s2PzEPuZKObgdpQtYUhfblinLDFThEWqRZMJKIbXTwc6qXueSI07XThEAtNtgCkhXwywi7pdXkWFXaX9MXxcbVgYkHmRy2S+gEgP6tSSfBSJydsyDbWFYkjjjoZZUdZaHXi0IHN506wFA7dr19MY00WLZhQEFnts9s9UDy/6vVp+RRhw+TB28FadPkIC9U8v8ZdpkH7kEN5EHcS97eUQRG8ggstmFiQamMiMS4gXsv1bONVqRGrlBcmJOc3qPFrmINTXN/GPhko/hlAoTQBlY1fi2GiaK33Ju8LKfr+WjAJiUTBjZyFi7eNhT/RH1keU28Qh/GrDD8m+nRhG4G9UsdYJoX8OVStS8UojmvBRCLakZB6FEtD9UJIexKm8Wt4UWssFIqhY2Hk0h9VtSsFUg240IKJBZkfuAjrimLvJM+gLmpVsxzjV/744vh+MtJkjUOt+qkhEprx66GLrf0rKjzxogUTmRiU34ciqk4vOAjrE0a5lBOLIzolpnAq5CEcghu/RovKmh2erLE8G1XLpp2Pw923KPpptGBiQaZBYDFZvuc6QoVeqRjdMPthG5ACChyFVGbsDuTCzUcxUvjTB00x1nstmEjEkLi8UPCEXACss0ZVjF9JSy+y0vXeLhxvReRKXo+STARfuoy2TkSxG0yV/jbu5dIiUFQD0IKJnYC1yqpGU6SdSEGo0UfYQuIefAuFqLR4slMRy3eR9NCaUCnUgdyab/t2Yd6I5ORHNlowoRB4HbcIB0uVlqcKrXhJ9SHIO7B6kqXtFIuufkbp+bXAKkVMsJSS1I0AEdg5FWN/y0oxvrkWTCwErttWKZb2iKISqqZwUa1Plp0fsfhCdCAX81CQ7UO4nWkJpBEJMfaJsutqHMav1t/FMrxowUQiNttExQaLIOTOylH0nRTNVqhog1A3h9K7BiHqcopbkJOHmu9RPOWbRwsmFgIrTGwak+KrLFwoYvyqCjylwVt3RPx8HFI7h4sUGcsXNK1LeIftFVa8hYBNY8LbMSpacFowkYjJspZzqBCp8Wu84Xnx8zUQlp+TqN5TDaG8wCTXCDmU7TGKHe5ar2gz0YJJSBRj2y/CVwIQn/YlSLrsWpKYtwvLiKNYK54ghVweWiiSTzEWqRZMLNi2XQmIkmaRKkxUr/ihDb5h7UyQnF9me5OI/OyoUV+UyEQoRGH8qikcrO26WKqEFkxCophmBnnj1+J5p0KH9VsUwydjPguI8Jius5pix17Fi0My0YKJhaAeCikewzVhUwCFzVOfCkEDxJykFgxCoxDLtvBynEfV4lY0W4HQggkFsaUci+dX2fvjJQjCxaLmi4yCKS82B2u26yH2sqIx09qcWFYL5uMJo5dy8kRREmEXt2j8gTy/KooWTCxI9XZYhHKsqm+k6kwmTEReOe5zPMJP69CoCDLre9Tj2KHYVsPGdlZObLmQixZMJKK6gzUV8yQOWxMM9M4hGb9GSgxu6KV7fo0wVCFQaLPiYul3wn4P0fiLpXytaMHEwqEy4yo2vL6aip24bD8lxdgxyUIXjaYYsdlD6qWcQwehD2wJkyjC0aIIX6lgEfkWsSzlSEj0UNqBVOzoyZ8caMNTqkgkEy2YWAjasVlnwip2kkVSZ10U2u6EKDvnqHyX0NIMIXJGirSya4qWYu2fRdCCSUgU1lDJhp7tqEOhfAsZ+RQ5C0ijKPojhUqxyDZaMJGIzfNrgc3iCxmvklblM4TqaZUx3cjKQokyV0FrUwAoMJIpkAUlkNE+i2ULuRZMJFKsLuk14cBrBBvUaLZQtCxOVBEuNYc2YVdDHpmi2JuEFkwkUqzbhXPhFHwnQM2yDh2F39m+YyDCdAmJHZJ1Q2H095BDcehF6GjBxEJg41eb51fZLTB4VRTV8hWJdjBWClVboQJibUlXWo3GD1VbiRZMNMyoOtsptEFfhh8TVb9FnOgiUZ+wvpEqthVR5YNWjooUQ2C0YGIh6ABXJHWiIIiiAcbmrJUzYdUMrdXIjwp50GjYkWL8yjkKqdpKtGBCoVgkz0MBJcZBH2y7YyR3BwXw+kzoNqcpdIII5br+59GCiYXgNiZy8qEqxTIAFgNCh/hF5mAt+jSjTksjhhratOKlWMYgLZhIpUhqhQR0SdjR3XHU6BqoOfTgFUxUbSVaMLGgBw9v9GxHHQrlW0Tqfr9AykQWMgYVmk1CWGVZ7F9IFSPcQkcLJhJhqZOHSsWNsgM6xMYjF6q9vxr5SWcijLwo8Xohc6j0UzyoUa+9KZavpgUTTSgUSwORBWkGqvt+TRAKYJw85Ihba1csAqUWTCwErVTFUSUKj0LzYyJKoRx5EMv5PIcgYfY3oS3lFHl9KBbBIG60YCIRXSc1PETRSRf5OOCBboyaQ49iqfVaMLFw6HbimrCRXbdYhZq4O6pinyFr+DhUtJuxEXeDl4QWTCiIuA2X4Wpcw09Yg1/c68WsqNbZq5EfFfJgRbX8pIlay0vqI+Nc/lDzq2i0YGKhQMYhTQGi65ZGox48IpEaArc3xTI51oKJRLSNSTyo310cWoi639fNRyOK7nvTFEs5aMHEQlDVfSrEWlEsFU6TR9Y39aq2h67Qli7cQpjlajQaO1owoaAFgcKhEGxBCiGPYXCIvnbBE9ZnIwmKh2rbCINiGba0YBIxxVJx4oa1HIt1xqwFZz+K87tHRVjVSxu/yqHYhTktmFAo8u9eVOhPpdFoNMUzYYlFMHnkkUcwcuRI9OnTB1dddRVaW1vjyIYnIh+4WCqFRhME62xOC41qQ+uz9HcrTPSuHEH+85//4Oabb8avfvUrvPnmm/j000/x/e9/P+pshEKxVIpCw0u7pb/JoYr+7hp/CrWWFLvr+8gFk0cffRSXXXYZLrjgAnzuc5/DPffcg2eeeQaNjY1RZ0WjKVgKpVuKe0k07vQ1migpFnklcsFk8eLFmDBhQu7viRMnorW1FcuXLyc+39bWhubmZtt/qlIslaLQ8DIEC2L8WiiDGms+ozKYU6PYwstFsRseykbl4uLJmkrvQauDxTIERS6Y1NfXo2fPnrm/y8rKUFVVhe3btxOfv/vuu1FdXZ37b9CgQZHks3f3Cu4wR/Tu5vvM6SP6AgDqqiqJ908a2gsAMHFore362EE13PlxcvzhPX2f6dMj/97D+3UHAJw1uh8AoKyEvWUe2bc79d4JmXyccmRv5vic9Oxa7nl/RL8eAIDPZ/LuxYQj7GU9pFdXAMCZI/sK5s6bXt3TeT/1qD4AgB6Vpbb7tHo0sq5H7rf1W/SoKKOm1aW8JPd7WB//+ikD6/t0qyj1eNKOV53J0r+6C1NcfTP1eNKwfB07fUQf5rx4MVSgHMcOqg6cbrZPOm14+p1quti/ew+Oss4ysJZcniP7p+taN0v9EaVHZT6fpYn8kNM70w5OG87/Xbo73rV3D3t/fQJDXwcAR/Xr4ftMv6p03Nb608eR3hmZe6celf42It8iG78zbiuliXS7z44TTo7s49+GrIwbXMP1fGSYEdO1a1fzxRdftF2rqqoyn3/+eeLzra2tZlNTU+6/zZs3mwDMpqamUPL34drd5qufbBcO/9LiLeaijQ3U+y1tSfOpD9eb2xsPEu837G8z//zherNhf5vtekdnynxm3kZzzc5m5rys2N5k/u2jTeZnu/abf5270Wzv6GQK9+on283Za3eZ9c2t5lMfrjebD7bn7r23ut78zyfbzb/M3WBu2L3fM55/LtxsLt3c6Lq+J/OOe1vaCKHYeX35DnP2ml3Ee9m8N1nyTqMt2Wl7n51NB82nPlxv7mtNBsqfk9lrd9nq1oG2DvOpORvMLXsPuJ611qNPtjaaf5+/yUylUrZn3ltdb765Yodvum+v3Gm+vXKnaZqm+e+l28x5n+0J8hq+tHd0mn/+cL054+Ot3GFfXLTF/HjTXtf1eZ/tMf+9dJtv+DnrdpuzluXL+GB7h/nbN1abd73yqdnY4l8XWPFr51nW7Gw2n5m30ezoTPk+68e2xgPmUx+uN1va8vXyjU93mK8v30GtRzQWbNhjzlxC/z47mw6av39rDfFbiPDmih3me6vrbde2NR4wn5qzwfY+rGxuaDFvfWGped3TC8yH31mb66OWbWk0n1+w2dWmnSzd3Gj+c+FmprS2Nx50lXv2W2xuaDH//OH6XN062J5u05sbWrjfqaUtaT41Z4O5rZH+HTftaTGfnrPBPNjeIfw+VpIdneYz8zaaa+v3cYcVoampiWn8Nkwz2gWIYcOG4Wc/+xmuvPJKAEBHRwfKysrwwQcf4OSTT/YN39zcjOrqajQ1NaGqqirs7Go0Go1Go5EA6/gd+VLO+PHjMW/evNzf8+bNQ1lZGUaNGhV1VjQajUaj0SgG/0JYQK677jqcf/75+OIXv4ihQ4filltuwcUXX4za2lr/wBqNRqPRaIqayAWTM888E7/73e9wyy23YPfu3TjnnHPwyCOPRJ0NjUaj0Wg0ChK5jUlQtI2JRqPRaDSFh7I2JhqNRqPRaDQ0tGCi0Wg0Go1GGbRgotFoNBqNRhm0YKLRaDQajUYZtGCi0Wg0Go1GGbRgotFoNBqNRhm0YKLRaDQajUYZtGCi0Wg0Go1GGbRgotFoNBqNRhkid0kflKyj2ubm5phzotFoNBqNhpXsuO3ncL7gBJN9+/YBAAYNGhRzTjQajUaj0fCyb98+VFdXU+8X3Fk5qVQK27ZtQ48ePWAYhrR4m5ubMWjQIGzevFmfwSMBXZ7y0GUpD12W8tBlKY9DpSxN08S+ffswYMAAJBJ0S5KC05gkEgkMHDgwtPirqqqKumJEjS5PeeiylIcuS3nospTHoVCWXpqSLNr4VaPRaDQajTJowUSj0Wg0Go0yaMEkQ0VFBW677TZUVFTEnZWiQJenPHRZykOXpTx0WcpDl6WdgjN+1Wg0Go1GU7xojYlGo9FoNBpl0IKJRqPRaDQaZdCCiUaj0Wg0GmXQgolGo9FoNBpl0IIJgEceeQQjR45Enz59cNVVV6G1tTXuLCnJ7t27cc0112DQoEGoqanB1772NezevTt3f9WqVZg8eTKqq6sxadIkLFq0yBY+mUzi+uuvR//+/TFs2DDcc889Ub+Cstxwww0wDAMbNmzIXdPlyU5TUxO++93vYuTIkejatSseeugh231dluy0tLTgmmuuQZ8+fVBTU4OLL74YO3futD2jy5NOKpXC9OnTkUgkbO0ZkFNuL730EsaMGYOePXviwgsvRENDQ5ivEw/mIc6sWbPMrl27mi+++KK5ZMkSc8KECeZVV10Vd7aU5Je//KV55ZVXmgsWLDDfeust88gjjzQvv/xy0zRNs7293Rw4cKD5/e9/31y1apV52223mTU1NWZjY2Mu/I9//GNz+PDh5oIFC8w33njDrK2tNZ966qmY3kYdXnrpJXPcuHEmAHP9+vWmaery5KGlpcUcMWKE+d3vftf86KOPzM2bN5u7du3K3ddlyceNN95o1tXVmW+88Yb5/vvvm+PHjzcvvvji3H1dnnT27t1rnnfeeeZZZ51la8+mKafcli1bZpaXl5t/+tOfzE8//dQ8//zzzTPPPDPKV4yEQ14wufDCC81rr7029/d7771nVlZWmnv37o0vUwXCL37xC/PII480TdM0Z8yYYXbv3t1sa2szTdM0U6mUOXToUPPhhx82TdM0k8mk2adPH/PZZ5/NhZ8+fbo5ceLE6DOuEJs3bzb79etnzpkzx9aR6fJk549//KN53nnnUe/rsuTj3HPPNa+77rrc33fffbd5/PHH5/7W5UlnxYoV5ne+8x3z4MGDLsFERrnddNNN5he+8IXc35s2bTIBmCtXrgz5zaLlkF/KWbx4MSZMmJD7e+LEiWhtbcXy5ctjzFVhsHXrVowaNQpAuhzHjRuH8vJyAIBhGJg0aRIWLFiQe3bXrl22sp40aRIWLlyIVCoVfeYVoLOzE5deeiluueUWTJw40XZPlyc7zz77LMaPH48vfvGLGDx4MC644AJs3Lgxd1+XJR8XXXQRZs+ejQMHDiCZTGLmzJn4+te/nruvy5POyJEj8eijj6KystJ1T0a5OcerQYMGYeDAgbk4ioVDXjCpr69Hz549c3+XlZWhqqoK27dvjzFX6rNz50688MILuOKKKwC4yxEAamtrc+VYX18PALZnamtrkUwmi3ONlIFf/OIXqKmpwc033+y6p8uTnU2bNuHpp5/GNddcgxkzZqC9vR1f+cpXcp25Lks+rrzySlx44YWYMGECJk+ejLPPPhvTpk3L3dflKYaMcvOLo1gouNOFNfHT3t6Oiy++GN/4xjdw0UUXxZ2dguS9997DU089hfnz58MwjLizU9Bs27YNjz32WK4uPvjggzjyyCOxYcMGDB06NObcFR7Lly/HrFmzcP/996O0tBQ//vGPceqpp+L000+PO2uaQ4RDXmNSV1eHvXv35v7u6OhAc3Mz+vfvH2Ou1MU0TVx//fVIpVI2i3FnOQJAQ0NDrhzr6uoAwPZMQ0MDysrKUFtbG0HO1eLxxx/HZ599hl69esEwjJxwcsQRR+CKK67Q5clBTU0NDjvssNzf2d+7du0CoOsmL9OmTcM555yDs846C6effjruuusunHfeedizZw8AXZ6iyCg3vziKhUNeMBk/fjzmzZuX+3vevHkoKyvL2U5o7Nx+++2YPXs2ZsyYgbKystz18ePHY9GiRWhvb89dmzt3LsaOHQsA6N+/P+rq6mxlPXfuXIwZMwaJxKFXDadPn47Fixfn/nvllVcAAK+88gqmT5+uy5OD0aNHY/bs2bm/16xZAwAYMmQIAF03eZkzZw6OPvro3N+jR49GS0tLzm5Hl6cYMsrNOV5t2bIFW7ZswZgxY6J5iaiI2/o2bt58802zW7du5owZM8xly5aZJ510kvnNb34z7mwpyYMPPmjW1dWZS5YsMXft2pX7r7293Uwmk+bQoUPNH/zgB+bq1avNO+64w+zevbu5Z8+eXPjbbrvNHDFihLlw4ULzrbfeMnv37m0++uijMb6ROqxfv95mxa/Lk50ZM2aYVVVV5r/+9S9zxYoV5pQpU8yzzz47d1+XJR9Tp041J02aZC5dutRcvXq1eckll5gDBgwwDxw4YJqmLk9W4NiVI6PcVq5caVZWVpqPP/64uWLFCvOCCy4wJ02aFOVrRcIhL5iYpmk+9thj5vDhw83a2lrz0ksvNffv3x93lpRkyJAhJgDXf2+//bZpmqa5du1ac/LkyWaPHj3M448/3pwzZ44tfEdHh/nDH/7QrKurM4cMGWLeeeedZiqViuFN1MMpmJimLk8eHn30UfOoo44yq6qqzAsvvNDcsWOH7b4uS3a2bt1qXnzxxWavXr3M7t27m2eeeab58ccf257R5emPsz2bppxymzlzpnnsscea1dXV5rnnnmvu3Lkz7FeJHMM0TTM2dY1Go9FoNBqNhUN3wU+j0Wg0Go1yaMFEo9FoNBqNMmjBRKPRaDQajTJowUSj0Wg0Go0yaMFEo9FoNBqNMmjBRKPRaDQajTJowUSj0Wg0Go0yaMFEo9FoNBqNMmjBRKPRaDQajTJowUSj0Wg0Go0yaMFEo9FoNBqNMmjBRKPRaDQajTJowUSj0Wg0Go0y/H8Id+JeX9vDPwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#score = df_boys['男1000米跑分数'] 得到的是一个 Series 对象\n",
    "score = df_boys[['男1000米跑分数']] # 返回一个 DataFrame 对象\n",
    "score.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "223d7000-648c-4d2a-98a8-dab398d19f3d",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "18c80547-4c91-4c3a-9920-2e283ed9b78d",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
